如何根据过滤条件合并Pandas DF中的行



我有一个pandas数据框架,其中有许多列。在某些情况下,行是重复的,有些列略有不同,例如:

tbody> <<tr>
NAME UNIQUE CODE nations ATTRBITUE other ATTRIBUTE NUMBERS
名称XYZABCUA欧盟SAXδ2
名称XYZABCCHYα3

可以使用groupbyaggagg函数,可以以列名称的字典作为键,以聚合函数作为值

  • 对于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]}
})
)

最新更新