在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
谢谢:)
答案 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