python - 根据pandas dataframe中同一行的上一列值计算百分比增加或减少
问题描述
我的数据框有 20 列和多行。我想根据前一列值但同一行计算百分比增加或减少。如果以前的值不可用(在第一列中),我想要 100 在那个地方。
我已经尝试过 pandas 的 shift(-1) 方法,但它不起作用。
数据框:
A B C D E F
10 20 25 50 150 100
100 130 195 150 250 250
预期的:
A B C D E F
100 100 25 100 200 -33
100 30 50 -23 66 0
解决方案
我想你可以使用shift(axis=1)
:
(df.diff(axis=1)/df.shift(axis=1) * 100 ).fillna(100).astype(int)
但我认为在转置上这样做更容易。
tmp_df = df.T
tmp_df = tmp_df.diff()/tmp_df.shift() * 100
tmp_df.fillna(100).astype(int).T
输出:
+----+------+------+-----+------+------+-----+
| | A | B | C | D | E | F |
+----+------+------+-----+------+------+-----+
| 0 | 100 | 100 | 25 | 100 | 200 | -33 |
| 1 | 100 | 30 | 50 | -23 | 66 | 0 |
+----+------+------+-----+------+------+-----+
推荐阅读
- java - 如何确定由 Executor.execute() (不是 ExecutorService )启动的线程/任务是否完成?
- c# - MonoGame - 通过内容管道加载 JSON
- java - 如何使用 CSVReaderHeaderAware 并遍历列
- timezone - momentjs UTC 未使用 fromNow 转换
- java - 如何使用 Drools、Java 8 和 Maven 运行 JUnit 测试?
- java - JDK是否包含jdbc api?
- python - 如何将“字节字符串”输入参数传递给从 MATLAB 调用的 python 函数?
- python - 如何检测无效输入并将用户置于循环中,直到输入可接受的答案?
- gdb - brew install gdb with python 3 不构建
- android - Android:如何将 Studio 连接到 Genymotion 虚拟设备?