如何展开多级熊猫数据框

Bra*_*vis 3 python dataframe pandas

我有一个包含三列的 Pandas 数据框,前两列是因子,第三列包含计数。我想“爆炸”或“展开”数据框,以便第一列、第二列的每个唯一元素没有一行,而是行数等于计数列的总和,其中每条新行都有一个唯一且递增的标识符号,但我希望两列之一中的每个级别都有一个单独的计数器。请注意,此问题类似于如何“展开”熊猫数据框?我昨天问过,但有一些额外的并发症,我第一次没有认识到,我无法概括(为我自己)如何扩展它。

这是数据框

data = [['van', 'bc', 1], ['abb', 'bc', 3], ['vic','bc',3], ['cal', 'ab', 1], ['edm', 'ab', 2], ['cal','ab', 2], ['van', 'bc', 1]]
df = pd.DataFrame(data, columns = ['city', 'state', 'count']) 
Run Code Online (Sandbox Code Playgroud)

我想把它变成这个


data = [['van', 'bc', 'dr0001'], ['abb', 'bc', 'dr0002'], ['abb', 'bc', 'dr0003'], ['abb', 'bc', 'dr0004'],  ['vic', 'bc', 'dr0005'], ['vic', 'bc', 'dr0006'], ['vic', 'bc', 'dr0007'], ['cal', 'ab', 'dr0001'], ['edm', 'ab', 'dr0002'], ['edm', 'ab', 'dr0003'], ['edm', 'ab', 'dr0004'], ['edm', 'ab', 'dr0005'], ['van', 'bc', 'dr0008']]
df = pd.DataFrame(data, columns = ['city', 'state', 'id'])
Run Code Online (Sandbox Code Playgroud)

谢谢

ank*_*_91 5

试试这个,我认为你需要一个额外的 groupby 和一些格式来查看你的输出:

out = df.loc[df.index.repeat(df["count"])]
out = (
    out.assign(
        id=out.groupby("state")
        .cumcount()
        .add(1)
        .astype(str)
        .str.zfill(4)
        .radd("dr")
    )
    .drop("count", 1)
    .reset_index(drop=True)
)
Run Code Online (Sandbox Code Playgroud)
print(out)

   city state      id
0   van    bc  dr0001
1   abb    bc  dr0002
2   abb    bc  dr0003
3   abb    bc  dr0004
4   vic    bc  dr0005
5   vic    bc  dr0006
6   vic    bc  dr0007
7   cal    ab  dr0001
8   edm    ab  dr0002
9   edm    ab  dr0003
10  cal    ab  dr0004
11  cal    ab  dr0005
12  van    bc  dr0008
Run Code Online (Sandbox Code Playgroud)

  • 伙计,你们很聪明,速度也很快。 (2认同)