为了账号安全,请及时绑定邮箱和手机立即绑定

Groupby 和连接值,但保留所有列

Groupby 和连接值,但保留所有列

慕无忌1623718 2022-05-19 13:59:57
我有这个数据框,想对 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.


查看完整回答
反对 回复 2022-05-19
?
慕哥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


查看完整回答
反对 回复 2022-05-19
?
慕村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()


查看完整回答
反对 回复 2022-05-19
  • 3 回答
  • 0 关注
  • 176 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信