我有这个数据框,想对 ID 进行分组并加入这些值。ID | A_Num | I_Num--------------------------001 | A_001 | I_001002 | A_002 | I_002003 | A_003 | I_004005 | A_002 | I_002期望的输出ID | A_Num | I_Num--------------------------001 | A_001 | I_001002;005 | A_002 | I_002003 | 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 列。
3 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
尝试reset_index()
:
df=df.groupby(['A_Num','I_Num'])["ID"].apply(lambda tags: ';'.join(tags.values)).reset_index()
这样,您的聚合 fromapply()
将被执行,然后重新分配为column
而不是index
.
慕哥9229398
TA贡献1877条经验 获得超6个赞
另一种方法是:
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
慕村9548890
TA贡献1884条经验 获得超4个赞
Groupby 'A_Num' 和 'I_Num' 然后合并同一组中的 ID。
df.groupby(['A_Num','I_Num']).ID.apply(lambda x: ';'.join(x.tolist())).reset_index()
添加回答
举报
0/150
提交
取消