gpt4 book ai didi

python - Pandas rolling_sum 与中心和 min_periods

转载 作者:行者123 更新时间:2023-11-28 17:42:58 25 4
gpt4 key购买 nike

我想在 DataFrame 上使用 pandas.rolling_sum 函数,使用每个窗口可用的任何数据对窗口求和(所以不要返回 NaN 当窗口超出可用数据时)。以下是一些示例数据:

import pandas as pd  # version 0.12.0  (Python 2.7)
df = pd.DataFrame([1]*4+[2]*4,
index=pd.date_range('2014-1-1', periods=8, freq='D'),
columns=['num'])
df.head()
# num
# 2014-01-01 1
# 2014-01-02 1
# 2014-01-03 1
# 2014-01-04 1
# 2014-01-05 2

这是基本的居中滚动总和...

pd.rolling_sum(df, 7, center=True)
# num
# 2014-01-01 NaN
# 2014-01-02 NaN
# 2014-01-03 NaN
# 2014-01-04 10
# 2014-01-05 11
# 2014-01-06 NaN
# 2014-01-07 NaN
# 2014-01-08 NaN

我想消除 NaN 值并使用每个窗口中可用的任何数据。我的预感是 min_periods 选项会解决这个问题......

pd.rolling_sum(df, 7, center=True, min_periods=0)
# num
# 2014-01-01 4
# 2014-01-02 6
# 2014-01-03 8
# 2014-01-04 10
# 2014-01-05 11
# 2014-01-06 NaN
# 2014-01-07 NaN
# 2014-01-08 NaN

这在使用 center=True 使窗口不居中时有效,但我很困惑为什么缺少最后三个值。我期望最后三个值是...

# 2014-01-06  10
# 2014-01-07 9
# 2014-01-08 8

谁能解释为什么 min_periods 在使用 center=True 选项时处理第一次观察但在最后一次观察失败?解决方法是什么?

最佳答案

好像pandas先计算:

>>> pd.rolling_sum(df, 7, center=False, min_periods=0)
num
2014-01-01 1
2014-01-02 2
2014-01-03 3
2014-01-04 4
2014-01-05 6
2014-01-06 8
2014-01-07 10
2014-01-08 11

[8 rows x 1 columns]

然后将结果偏移-offset,其中

offset = int((window - 1) / 2.)

即使 min_periods=0,这也会导致最后一个条目的值为 NaN;解决我的问题如下:

>>> rs = pd.rolling_sum(df, 7, center=True, min_periods=0)
>>> rs.update( pd.rolling_sum(df.iloc[:-7:-1], 7, center=True, min_periods=0) )
>>> rs
num
2014-01-01 4
2014-01-02 6
2014-01-03 8
2014-01-04 10
2014-01-05 11
2014-01-06 10
2014-01-07 9
2014-01-08 8

[8 rows x 1 columns]

关于python - Pandas rolling_sum 与中心和 min_periods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com