【问题标题】:pandas rolling window: variable length from start to x熊猫滚动窗口:从开始到x的可变长度
【发布时间】:2018-07-30 04:53:03
【问题描述】:

对于pandas.DataFrame.rolling 窗口,我可以设置描述固定宽度(固定元素数量 或固定offset)的window 大小。

如何获得一个始终从第一个条目开始并前滚到每个条目的窗口?例如,在 DataFrame 中有一个系列 x,我想每行获得以下窗口:

    x    intended_window
0  10    [10]
1  11    [10,11]
2  12    [10,11,12]
3  13    [10,11,12,13]
4  14    [10,11,12,13,14]

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您不需要中间结果——您可以直接使用 pandas 的扩展均值来计算它。 Pandas 提供了一个称为expanding 窗口的功能,它允许您对扩展的值窗口执行计算。对于您的情况,您需要expanding.mean:

    df.x.expanding().mean()
    
    0    10.0
    1    10.5
    2    11.0
    3    11.5
    4    12.0
    Name: x, dtype: float64
    

    请注意,它与您当前使用的相同:

    df['intended_window'].apply(np.mean)
    
    0    10.0
    1    10.5
    2    11.0
    3    11.5
    4    12.0
    Name: intended_window, dtype: float64 
    

    但前者的性能要好得多。

    【讨论】:

    • 我不认为那是一个窗口(来自pandas.core.window),或者是吗?我不能对它应用窗口功能。 type (df['intended_window']) 返回<class 'pandas.core.series.Series'>
    • @ascripter 每行都是来自x 的值的窗口。您可以在每一行上单独使用apply/applymap。这不是需要的吗?你的问题似乎表明了这一点:)
    • 我正在考虑做某事。像df['x'].rolling().mean(),但这不起作用。我只是这样想出来的:df['window'].apply(lambda x: np.mean(x))。不是很好,但工作:)
    • @ascripter 哇,这就是 XY 问题的定义。使用df.x.expanding().mean(),你会得到完全相同的东西。我敢打赌这就是你想要的。
    猜你喜欢
    • 2014-08-11
    • 2017-03-30
    • 1970-01-01
    • 2020-04-21
    • 2021-03-30
    • 1970-01-01
    • 2018-07-10
    • 2019-10-21
    • 2020-12-25
    相关资源
    最近更新 更多