Pandas是否具有pandas.DataFrame.contracting
窗口功能,而该功能与pandas.DataFrame.expanding
无需先进行数据排序相反?与Window.unboundedFollowing
相比,这类似于Spark的Window.unboundedPreceding
。
我认为.rolling
会是这样
示例:
import pandas as pd
testdf = pd.DataFrame({'A': [2, 2, 2, 5, 1, 0, 1, 2, 0, 1]})
testdf['A'].expanding(min_periods=1).apply(lambda x: (x > 2).any()).tolist()
# [0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
以下使用.rolling
产生与上面相同的结果。
testdf['A'].rolling(window=len(testdf), min_periods=1).apply(lambda x: (x > 2).any()).tolist()
# [0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
如何更改.rolling
使其朝相反的方向工作?
结果应为:
# [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
答案 0 :(得分:1)
您可以使用
testdf.loc[::-1, 'A'].expanding(min_periods=1).apply(lambda x: (x > 2).any())[::-1]
产生
0 1.0
1 1.0
2 1.0
3 1.0
4 0.0
5 0.0
6 0.0
7 0.0
8 0.0
9 0.0
Name: A, dtype: float64
这将以相反的顺序将扩展窗口应用于“系列”,然后反转该结果,从而使窗口收缩。
不幸的是,我不认为expanding
中内置了用于执行此操作的选项。