Python:计算数据框中的列相减

Metalhead Prime

我有一个像这样的数据框:

   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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章