在滚动窗口中计算第一个值和最后一个值之间的差异。

7

我正在使用 Pandas 的滚动窗口工具,对一个日期时间形式的单列数据框进行操作。

我想计算每个窗口中第一个值和最后一个值之间的差异。当给定 lambda 函数时,如何引用相对索引?(在下面的括号中)

df2 = df.rolling('3s').apply(...)
1个回答

12

我理解的是:

In [93]: df = pd.DataFrame(np.random.randint(10,size=(9, 3)))

In [94]: df
Out[94]:
   0  1  2
0  7  4  5
1  9  9  3
2  1  7  6
3  0  9  2
4  2  3  7
5  6  7  1
6  1  0  1
7  8  4  7
8  0  0  9

In [95]: df.rolling(window=3).apply(lambda x: x[0]-x[-1])
Out[95]:
     0    1    2
0  NaN  NaN  NaN
1  NaN  NaN  NaN
2  6.0 -3.0 -1.0
3  9.0  0.0  1.0
4 -1.0  4.0 -1.0
5 -6.0  2.0  1.0
6  1.0  3.0  6.0
7 -2.0  3.0 -6.0
8  1.0  0.0 -8.0

如果您还想获取每个窗口的第一行和最后一行怎么办?尝试了应用程序的方法,虽然可行但缩放性不佳。 - Abhishek Malik
4
有没有一种不使用 apply 的方法来做这件事? apply 太慢了。 - rindis
我在使用 pandas 1.5.2 时遇到了“KeyError: -1”。通过使用 iloc,问题得到了解决:df.rolling(window=3).apply(lambda x: x.iloc[0]-x.iloc[-1]) - AXO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接