如何相互减去多列

时间:2019-02-05 01:28:42

标签: python-3.x pandas

在Pandas的Python 3.6中工作,我试图找到一种简单的方法来相互减去多列。

想象一个简单的数据帧df,它有两行四列:

    A    B    C    D
0   1    2    3    4
1   5    6    7    8

我正在尝试从B中减去A,从D中减去C,以实现:

    A    B    C    D
0   1    1    3    1
1   5    1    7    1

这可以很容易地逐列完成,例如对于B-A操作:

 df["B"] = df["B"] - df["A"]

 df["B"] = df["B"].sub(df["A"], axis=0)

我尝试过:

 df[["B", "D"]] = df[["B", "D"]] - df[["A", "C"]]

 df[["B", "D"]] = df[["B", "D"]].sub(df[["A", "C"]], axis=0)

但是两者都会给出关于不匹配的列的错误,因此我怀疑是在无意中告诉它执行某种多轴操作或其他操作。无论如何,这些都不起作用。

ValueError: Columns must be same length as key

所以在同一行中对B-A和D-C做到这一点的最简单方法是什么...我的实际数据帧大约有30列,所以逐行实际上是不可行的:P

谢谢:)

1 个答案:

答案 0 :(得分:1)

在这种情况下,通常使用numpy操作,因为该操作将逐个元素进行。有一个很小的补充可以解决该问题。将df[['A','C']]更改为df[['A','C']].values

代码:

df[['B', 'D']] = df[['B','D']] - df[['A','C']].values

输出:

    A   B   C   D
0   1   1   3   1
1   5   1   7   1