将计数行值展开为单独的行,在python中添加不同的ID

将计数行值展开为单独的行,在python中添加不同的ID,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据集,它有几个行和列,但是在标记为“number”的列中,我希望删除聚合并将其分离为自己的唯一计数。我还希望添加一列,为该计数提供一个唯一的id 数据 location name type number year ny hello he 1 2021 ny bye by 0 2021 ny ok o 2 2021 ca

我有一个数据集,它有几个行和列,但是在标记为“number”的列中,我希望删除聚合并将其分离为自己的唯一计数。我还希望添加一列,为该计数提供一个唯一的id

数据

location    name    type    number  year
ny          hello   he      1       2021
ny          bye     by      0       2021
ny          ok      o       2       2021
ca          hi      h       1       2021
所需的

location    name    type    number  year    count
ny          hello   he      1       2021    he1
ny          bye     by      0       2021    by1
ny          ok      o       1       2021    o1
ny          ok      o       1       2021    o2
ca          hi      h       1       2021    h1
字符串“ok”现在被分成不同的行,而不是用值2进行聚合。 “number”列中的值现在被分成两个不同的行,并带有一个不同的计数ID(基于“name”列),而不是聚合

df = df1.reindex(df1.index.repeat(df1['number'])).assign(number=1)
df['count'] = df['type'] + '0' + (df.groupby(['location', 'name', 'type', 'number', 'year']).cumcount() + 1).astype(str)
df
我得到了SO成员的帮助,但是,在本例中,如果数字列中的值为0,我将如何解释? 我还在研究这个


任何建议或建议均受欢迎

仅对重复的
编号
的值进行拆分,如
1
,然后添加编号为0,1的行,并对原始排序进行排序:

m = df1['number'].gt(1)
df2 = df1[m]
df = (pd.concat([df2.reindex(df2.index.repeat(df2['number'])).assign(number=1),
                 df1[~m]]).sort_index())

df['count'] = df['type'] + '0' + (df.groupby(['location', 'name', 'type', 'number', 'year']).cumcount() + 1).astype(str)

print (df)
  location   name type  number  year count
0       ny  hello   he       1  2021  he01
1       ny    bye   by       0  2021  by01
2       ny     ok    o       1  2021   o01
2       ny     ok    o       1  2021   o02
3       ca     hi    h       1  2021   h01