Python Groupby和join值,但保留所有列
我有这个数据帧,希望根据ID分组并加入值Python Groupby和join值,但保留所有列,python,python-3.x,pandas,pandas-groupby,Python,Python 3.x,Pandas,Pandas 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_0
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
代码:
当我将数据帧写入csv文件时,我只有ID列。尝试reset\u index()
:
df=df.groupby(['A_Num','I_Num'])[“ID”].apply(lambda标记:';').join(标记.值)).reset_index()
这样,将执行来自
apply()
的聚合,然后将其重新指定为列
,而不是索引
,另一种方法是:
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
Groupby'A_Num'和'I_Num',然后合并相同组中的ID
df.groupby(['A_Num','I_Num']).ID.apply(lambda x: ';'.join(x.tolist())).reset_index()
您正在这里选择
ID
列df=df.groupby(['A_Num','I_Num'])['ID']
对不起,我不明白您的意思df.groupby(['A_Num','I_Num'])['ID']。应用(';'.join)。重置索引().reindex(columns=df columns)。to_csv(…)
以保持原始列顺序
df.groupby(['A_Num','I_Num']).ID.apply(lambda x: ';'.join(x.tolist())).reset_index()