我對熊貓有點陌生,正在努力尋找解決我的問題的方法。
我的資料框看起來像這樣:
| ID | 數量 | 一個 | 乙 | C |
|---|---|---|---|---|
| 1 | 3.5 | 0 | 0 | 1 |
| 1 | 10 | 0 | 1 | 0 |
| 1 | 30 | 1 | 0 | 0 |
| 2 | 3.6 | 0 | 0 | 1 |
| 2 | 11 | 0 | 1 | 0 |
| 2 | 20 | 1 | 0 | 0 |
當“Id”列中的值相同時,我想將“num”列中的值復制到 A、B 或 C 列中將“1”作為值的列,然后將它們合并為一行并完全洗掉“num”列。
有點像這樣:
| ID | 數量 | 一個 | 乙 | C |
|---|---|---|---|---|
| 1 | 3.5 | 0 | 0 | 3.5 |
| 1 | 10 | 0 | 10 | 0 |
| 1 | 30 | 30 | 0 | 0 |
| 2 | 3.6 | 0 | 0 | 3.6 |
| 2 | 11 | 0 | 11 | 0 |
| 2 | 20 | 20 | 0 | 0 |
最后:
| ID | 一個 | 乙 | C |
|---|---|---|---|
| 1 | 30 | 10 | 3.5 |
| 2 | 20 | 11 | 3.6 |
uj5u.com熱心網友回復:
第一步,這是一個簡單的乘法,使用mul:
cols = ['A', 'B', 'C']
df[cols] = df[cols].mul(df['num'], axis=0)
第二步,使用groupby max:
df.groupby('Id', as_index=False)[cols].max()
沒有中間的所有步驟:
cols = ['A', 'B', 'C']
(df[cols].mul(df['num'], axis=0)
.groupby(df['Id']).max()
.reset_index()
)
輸出 1:
Id num A B C
0 1 3.5 0.0 0.0 3.5
1 1 10.0 0.0 10.0 0.0
2 1 30.0 30.0 0.0 0.0
3 2 3.6 0.0 0.0 3.6
4 2 11.0 0.0 11.0 0.0
5 2 20.0 20.0 0.0 0.0
輸出 2:
Id A B C
0 1 30.0 10.0 3.5
1 2 20.0 11.0 3.6
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398222.html
