pandas中如何合并DataFrame多行记录

如下DataFrame, 有三个列sitematerialLT,现需要根据materialsite去重后合并,并取出LT最大值。

1
2
3
4
5
6
7
df = pd.DataFrame([['FJZ','A123',123],
['FOC','A123',456],
['FJZ','B456',112],
['FJZ','B456',245],
['FJZ','B456',110],
['FOC','C789',202],
['FOC','C789',205]],columns=['site','material','LT'])

原始DataFrame数据如下:

1
2
3
4
5
6
7
8
  site material   LT
0 FJZ A123 123
1 FOC A123 456
2 FJZ B456 112
3 FJZ B456 245
4 FJZ B456 110
5 FOC C789 202
6 FOC C789 205

直接groupbyjoin:

1
df.groupby('material').agg({'site': ','.join, 'LT': max}).reset_index()

处理后数据如下:

1
2
3
4
  material         site   LT
0 A123 FJZ,FOC 456
1 B456 FJZ,FJZ,FJZ 245
2 C789 FOC,FOC 205

第二行数据中,site列的FJZ出现了重复。
这里我们换一种思路,由于site列涉及去重、拼接两个步骤,可以先定义一个处理函数,把这两个步骤串起来。

1
2
def agg_func(items):
return ','.join(set(items))

然后再调用这个函数:

1
df.groupby('material').agg({'site': agg_func, 'LT': max}).reset_index()

最后效果如下:

1
2
3
4
  material     site   LT
0 A123 FJZ,FOC 456
1 B456 FJZ 245
2 C789 FOC 205

完毕!