我的数据框有20列和多行。我想根据前一列的值但同一行来计算增加或减少的百分比。如果以前的值不可用(在第一列中),那么我希望该位置为100。
我尝试了大熊猫的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
答案 0 :(得分:1)
我想您可以使用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 |
+----+------+------+-----+------+------+-----+