我有一个像这样的数据框:
id_A id_B f1_A f2_A f3_A f1_B f2_B f3_B t
1 2 1 2 3 4 5 6 1
2 3 4 5 6 7 8 9 0
3 4 7 8 9 8 7 6 1
我想做一个减法来产生这样的结果:
id_A id_B f1_A-f1_B f2_A-f2_B f3_A-f3_B t
1 2 -3 -3 -3 1
2 3 -3 -3 -3 0
3 4 -1 1 3 1
即,(df中的第3到第5列)减(df中的第6到第8列),同时将列的索引更改为fx_A-fy_A。
我尝试使用
df[cols[2:5]].sub(df[cols[5:8]], fill_value=0)
但是,结果绝对不是我想要的:
f1_A f1_B f2_A f2_B f3_A f3_B
1.0 -4.0 2.0 -5.0 3.0 -6.0
4.0 -7.0 5.0 -8.0 6.0 -9.0
7.0 -8.0 8.0 -7.0 9.0 -6.0
我现在不知道如何达到预期的结果。对不起,我的英语,我仍然是Python的初学者,任何帮助将不胜感激!
一种方法是根据列的结尾是还是来过滤列,然后对这些过滤后的数据帧进行计算。将所有其他列放在索引中,然后在最后重置索引以将其取回:_A
_B
df.set_index(['id_A','id_B','t'],inplace=True)
A = df.filter(regex='f*_A')
B = df.filter(regex='f*_B')
new_df = (A.values - B)
# Join your column names
new_df.columns = ['-'.join((x,y)) for x,y in zip(A.columns,B.columns)]
new_df.reset_index(inplace=True)
>>> new_df
id_A id_B t f1_A-f1_B f2_A-f2_B f3_A-f3_B
0 1 2 1 -3 -3 -3
1 2 3 0 -3 -3 -3
2 3 4 1 -1 1 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句