代码之家  ›  专栏  ›  技术社区  ›  Clay

熊猫有“收缩”窗口功能吗

  •  0
  • Clay  · 技术社区  · 7 年前

    熊猫有 pandas.DataFrame.contracting 窗口函数,与 pandas.DataFrame.expanding 没有 必须先对数据进行排序?这和斯帕克的很相似 Window.unboundedFollowing 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]
    

    以下用途 .滚动 产生与上述相同的结果。

    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]
    

    我该怎么改变 .滚动 在相反的方向工作?
    结果应该是:

    # [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   unutbu    7 年前

    你可以用

    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 因为这样做。