首页 > 解决方案 > 如何相互减去多列

问题描述

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

想象一个两行四列的简单数据框 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

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

 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

Sooo 在同一行中为 BA 和 DC 完成此操作的最简单方法是什么……我的实际数据框有大约 30 列,所以逐行是不可行的:P

谢谢 :)

标签: python-3.xpandas

解决方案


在这种情况下通常使用 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

推荐阅读