【发布时间】:2020-10-08 19:26:55
【问题描述】:
我正在寻找一种在具有三列的 Pandas DataFrame 中执行滚动百分比的方法。对于我的 df 中的每一行,我想计算最后三行与该列中的三次行之间的差异,然后对每一列执行此操作。对于输出,我想对每一行的平均值求和。下面,我将尝试向您展示我的意思以及我尝试过的内容。但是,正如您所知,我的知识有限,我正在寻找一种更快、更有效的方法来产生如下类似的输出,但对于更大的 DataFrame 中的每一行......
很高兴收到任何反馈!
我的测试数据集如下所示:
df1 = pd.DataFrame([[1,3,2,4,5,6,3,4],[1,3,4,6,7,2,3,4],[1,2,2,4,12,9,8,4]]).T
print(df1)
0 1 2
0 1 1 1
1 3 3 2
2 2 4 2
3 4 6 4
4 5 7 12
5 6 2 9
6 3 3 8
7 4 4 4
如果我要“手动”执行此操作,它将从以下开始:
pctChange = pd.DataFrame([df1.First.pct_change(periods=3),df1.Second.pct_change(periods=3),df1.Third.pct_change(periods=3)]).T
print(pctChange)
First Second Third
0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
3 3.000000 5.000000 3.000000
4 0.666667 1.333333 5.000000
5 2.000000 -0.500000 3.500000
6 -0.250000 -0.500000 1.000000
7 -0.200000 -0.428571 -0.666667
然后取每一行的平均值。
ave = pctChange.mean(axis=1)
print(ave)
0 NaN
1 NaN
2 NaN
3 3.666667
4 2.333333
5 1.666667
6 0.083333
7 -0.431746
最后对最近的三行求和
SumOfLastThree = ave.iloc[-3:].sum()
print(SumOfLastThree)
#desired output
1.3182539682539682
【问题讨论】:
-
查看
.rolling()函数。 Pandas docs here。还有.diff()函数。 Docs here. -
谢谢@S3DEV,我会再看看并尝试弄清楚如何完成这个!
标签: python pandas numpy dataframe