我有一個熊貓資料框,其中有許多列。在某些情況下,行重復,某些列略有變化,例如:
| 姓名 | 唯一代碼 | 國家 | 屬性 | 另一個屬性 | 數字 |
|---|---|---|---|---|---|
| 姓名 | XYZABC | UA 歐盟 SA | X | 三角洲 | 2 |
| 姓名 | XYZABC | 甲烷 | 是 | Α | 3 |
我想要做的是連接上面得到:
| 姓名 | 唯一代碼 | 國家 | 屬性 | 另一個屬性 | 數字 |
|---|---|---|---|---|---|
| 姓名 | XYZABC | UA 歐盟 SA CH | XY | 三角洲阿爾法 | 5 |
如何根據“唯一代碼”識別重復行并將不同列下的其他行值連接起來,唯一代碼除外?
uj5u.com熱心網友回復:
您可以使用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]}
})
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477288.html
上一篇:NodeJS包輸出空字串
