У меня есть фрейм данных pandas, в котором есть несколько столбцов. В некоторых случаях строки дублируются с небольшими изменениями в некоторых столбцах, например:
НАЗВАНИЕ | УНИКАЛЬНЫЙ КОД | СТРАНЫ | ОТВЕТСТВЕННОСТЬ | ДРУГОЙ АТРИБУТ | НОМЕРА |
---|---|---|---|---|---|
Имя | XYZABC | UA EU SA | Икс | ДЕЛЬТА | 2 |
Имя | XYZABC | CH | Д | АЛЬФА | 3 |
Что я хочу сделать, так это объединить вышеизложенное, чтобы получить:
НАЗВАНИЕ | УНИКАЛЬНЫЙ КОД | СТРАНЫ | АТРИБУТ | ДРУГОЙ АТРИБУТ | НОМЕРА |
---|---|---|---|---|---|
Имя | XYZABC | UA EU SA CH | Х Г | ДЕЛЬТА АЛЬФА | 5 |
Как определить повторяющиеся строки на основе, скажем, «УНИКАЛЬНОГО КОДА» и объединить другие значения строк в разных столбцах, за исключением УНИКАЛЬНОГО КОДА?
Вы можете использовать функцию groupby
agg
и agg
, которая может принимать словарь имени столбца в качестве ключа и функцию агрегации в качестве значения.
first
(или last
).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]}
})
)