我对熊猫有点陌生,正在努力寻找解决我的问题的方法。
我的资料框看起来像这样:
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
0 评论