我有这个数据框,想对ID分组并加入值。
ID | A_Num | I_Num
--------------------------
001 | A_001 | I_001
002 | A_002 | I_002
003 | A_003 | I_004
005 | A_002 | I_002
所需的输出
ID | A_Num | I_Num
--------------------------
001 | A_001 | I_001
002;005 | A_002 | I_002
003 | A_003 | I_004
代码:
df = df.groupby(['A_Num','I_Num'])['ID'].apply(lambda tags: ';'.join(tags))
df.to_csv('D:\joined.csv', sep=';', encoding='utf-8-sig', quoting=csv.QUOTE_ALL, index=False, header=True)
当我将DataFrame写入csv文件时,我只有ID列。
答案 0 :(得分:3)
尝试reset_index()
:
df=df.groupby(['A_Num','I_Num'])["ID"].apply(lambda tags: ';'.join(tags.values)).reset_index()
这样,将执行您从apply()
进行的聚合,然后将其重新分配为column
而不是index
。
答案 1 :(得分:0)
另一种实现方法是:
result= df.groupby(['A_Num', 'I_Num']).agg({'ID': list})
result.reset_index(inplace=True)
result[['ID', 'A_Num', 'I_Num']]
输出为:
Out[37]:
ID A_Num I_Num
0 [001 ] A_001 I_001
1 [002 , 005 ] A_002 I_002
2 [003 ] A_003 I_004
在这种情况下,ID包含列表。如果您想使用字符串,请执行以下操作:
result['ID']= result['ID'].map(lambda lst: ';'.join(lst))
result[['ID', 'A_Num', 'I_Num']]
哪个输出:
Out[48]:
ID A_Num I_Num
0 001 A_001 I_001
1 002;005 A_002 I_002
2 003 A_003 I_004
答案 2 :(得分:0)
按“ A_Num”和“ I_Num”分组,然后将ID合并到相同的组中。
df.groupby(['A_Num','I_Num']).ID.apply(lambda x: ';'.join(x.tolist())).reset_index()