如何根据筛选条件合并 Pandas DF 中的行

How to Merge Rows in Pandas DF based on Filter Criteria

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

NAME UNIQUE CODE COUNTRIES ATTRBITUE ANOTHER ATTRIBUTE NUMBERS
Name XYZABC UA EU SA X DELTA 2
Name XYZABC CH Y ALPHA 3

我想做的是将上面的连接起来得到:

NAME UNIQUE CODE COUNTRIES ATTRIBUTE ANOTHER ATTRIBUTE NUMBERS
Name XYZABC UA EU SA CH X Y DELTA ALPHA 5

如何根据 'UNIQUE CODE' 识别重复行,并连接不同列下的其他行值(唯一代码除外)?

您可以使用groupby aggagg函数可以将列名的字典作为键和聚合函数作为值。

  • 对于 NAME 列,您只取了 1 个值 => first(或 last)。
  • 对于 NUMBERS 列,您将获得该列的总和。 => sum
  • 对于其他列,您正在获取字符串连接 => ' '.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]}
 })
)