我有一个pandas数据框架,其中有许多列。在某些情况下,行是重复的,有些列略有不同,例如:
NAME | UNIQUE CODE | nations | ATTRBITUE | other ATTRIBUTE | NUMBERS | 名称 | XYZABC | UA欧盟SA | X | δ | 2 |
---|---|---|---|---|---|
名称 | XYZABC | CH | Y | α | 3 |
可以使用groupby
、agg
和agg
函数,可以以列名称的字典作为键,以聚合函数作为值
- 对于NAME列,您只取1个值=>
first
(或last
). - 对于NUMBERS列,您将获得该列的和。=比;
sum
- 对于其他列,您将获得字符串的concat =>
' '.join
所以,你需要这个字典来传递agg
函数。
{
'NAME': 'first',
'NUMBERS': 'sum',
'COUNTRIES': ' '.join,
'ATTRIBUTE': ' '.join,
'ANOTHER ATTRIBUTE': ' '.join
}
可以直接将这个硬编码字典传递给agg
函数。或者你可以把这个写得更紧凑一些,像这样
join_col = ['COUNTRIES', 'ATTRIBUTE', 'ANOTHER ATTRIBUTE']
(df.groupby('UNIQUE CODE', as_index=False)
.agg({
**{'NAME': 'first', 'NUMBERS': 'sum'},
**{x: ' '.join for x in join_col]}
})
)