如何从指定列动态地减去多个pandas dataframe列中的值。在这种情况下,如何从存款中减去A,B和C列,并将值放在相应的A,B和C列中。
date deposit A B C
0 2017-01-15 12 5 10 12
1 2017-01-16 20 10 4 32
2 2017-01-17 5 50 10 18
3 2017-01-18 22 15 20 12
应该产生:
date deposit A B C
0 2017-01-15 12 7 2 0
1 2017-01-16 20 10 16 -12
2 2017-01-17 5 -45 -5 -13
3 2017-01-18 22 7 2 10
答案 0 :(得分:5)
In [226]: df[['A','B','C']] = df.deposit.values[:, None] - df[['A','B','C']]
In [227]: df
Out[227]:
date deposit A B C
0 2017-01-15 12 7 2 0
1 2017-01-16 20 10 16 -12
2 2017-01-17 5 -45 -5 -13
3 2017-01-18 22 7 2 10
答案 1 :(得分:3)
loc
+ rsub
cols = ['A', 'B', 'C']
df.loc[:, cols] = df[cols].rsub(df.deposit, 0)
df
date deposit A B C
0 2017-01-15 12 7 2 0
1 2017-01-16 20 10 16 -12
2 2017-01-17 5 -45 -5 -13
3 2017-01-18 22 7 2 10
<强> inplace
强>
我喜欢这样做inplace
df.update(df[['A', 'B', 'C']].rsub(df.deposit, 0))
df
date deposit A B C
0 2017-01-15 12 7 2 0
1 2017-01-16 20 10 16 -12
2 2017-01-17 5 -45 -5 -13
3 2017-01-18 22 7 2 10
<强> copy
强>
我的整体偏好
df.assign(**df[['A', 'B', 'C']].rsub(df.deposit, 0).to_dict('list'))
date deposit A B C
0 2017-01-15 12 7 2 0
1 2017-01-16 20 10 16 -12
2 2017-01-17 5 -45 -5 -13
3 2017-01-18 22 7 2 10
答案 2 :(得分:1)
for c in ['A','B','C']:
df[c]=df['deposit']-df[c]