![](/img/trans.png)
[英]Separate aggregated row into distinct rows, adding a unique count in pandas
[英]Expand counted row value into separate rows, adding distinct ID in python
我有一個包含多行和多列的數據集,但是在標記為“數字”的列中,我希望刪除聚合並將其分成自己的唯一計數。 我還希望添加一列,為該計數提供唯一 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 ' 列中的值現在被分成 2 個不同的行,以及不同的計數 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.