我有一个数据集,它有几个行和列,但在标记为"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,我将如何解释?我还在研究这个。
欢迎任何建议
想法是,仅重复number
的值与1
的值更大,然后使用number=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