我有一个这样的数据框(很多行):
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
a 34 24 47 30 11 57 47 44 22 33 16 39
b 50 53 42 23 19 29 38 46 21 18 13 24
. . .
.
. . .
我想使用滚动3个月的百分比变化值创建新的df,因此[1,1]元素将是Apr值和Jan值[1,2]之间的百分比变化。元素将是5月和2月等之间的百分比变化...因此,对于每个值,我希望该值与3个月前的值之间的百分比变化
这是我想要的示例输出(例如,第一个值是 [(30-34)/ 34] * 100 = -11.7):
Apr May Jun Jul Aug Sep Oct Nov Dec
a -11.7% -54.1% 0% 56.6% 300% .. .. .. ..
. .
. .
我知道大熊猫有.pct_change
,但这不能按照我想要的方式计算百分比。关于如何在python中执行此操作的任何想法?
谢谢
答案 0 :(得分:3)
将pct_change
与axis=1
和periods=3
一起使用:
df.pct_change(periods=3, axis=1)
输出:
Jan Feb Mar Apr May Jun Jul Aug Sep \
a NaN NaN NaN -0.117647 -0.541667 0.212766 0.566667 3.000000 -0.614035
b NaN NaN NaN -0.540000 -0.641509 -0.309524 0.652174 1.421053 -0.275862
Oct Nov Dec
a -0.297872 -0.636364 0.772727
b -0.526316 -0.717391 0.142857
丢弃NaN列:
df.pct_change(periods=3, axis=1).dropna(1)
输出:
Apr May Jun Jul Aug Sep Oct Nov Dec
a -0.117647 -0.541667 0.212766 0.566667 3.000000 -0.614035 -0.297872 -0.636364 0.772727
b -0.540000 -0.641509 -0.309524 0.652174 1.421053 -0.275862 -0.526316 -0.717391 0.142857