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

我有这个数据框,想对 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 列。


慕无忌1623718
浏览 177回答 3
3回答

慕尼黑8549860

尝试reset_index():df=df.groupby(['A_Num','I_Num'])["ID"].apply(lambda tags: ';'.join(tags.values)).reset_index()这样,您的聚合 fromapply()将被执行,然后重新分配为column而不是index.

慕哥9229398

另一种方法是: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_Num0        [001 ]   A_001    I_0011  [002 , 005 ]   A_002    I_0022        [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_Num0      001  A_001  I_0011  002;005  A_002  I_0022      003  A_003  I_004

慕村9548890

Groupby 'A_Num' 和 'I_Num' 然后合并同一组中的 ID。df.groupby(['A_Num','I_Num']).ID.apply(lambda x: ';'.join(x.tolist())).reset_index()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python