python-3.x - 如何相互减去多列
问题描述
在 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
谢谢 :)
解决方案
在这种情况下通常使用 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
推荐阅读
- csv - 将 CSV 文件从 Google Drive 加载到 BigQuery 会产生零行且没有错误
- batch-file - 如何使用批处理文件脚本编辑 web.config 文件内容?
- php - 学说 - 数据包乱序
- keras - 加载 .hdf5 模型时出现问题(ValueError:未知层:FixedBatchNormalization)
- java - CVE-2018-2783 - 可以澄清一下这里的 CVE 是什么意思吗?
- ios - 在 Cordova 中,如何添加要在 Swift 而不是 Objective C 中构建的 iOS 平台?
- c++ - 编译器会删除无效的引用吗?
- arrays - How to pass data into swiftui view and access it
- couchbase - 如何加入一个数组中的元素,该数组也是另一个数组的一部分,以在沙发库中获得最佳性能?
- python - 动态变化