如何根据筛选条件合并 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
agg
和agg
函数可以将列名的字典作为键和聚合函数作为值。
- 对于 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]}
})
)
我有一个 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
agg
和agg
函数可以将列名的字典作为键和聚合函数作为值。
- 对于 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]}
})
)