python - 如何在 Pandas 中使用滚动不包含最后一个值?

标签 python pandas

我正在尝试获取过去 x 值的滚动平均值。通过查看文档,滚动方法似乎包含最后一个值。

上述行为可以在文档中的以下示例中看到:

In [51]: ser = pd.Series(np.random.randn(10), index=pd.date_range('1/1/2000', periods=10))

In [52]: ser.rolling(window=5, win_type='triang').mean()
Out[52]: 
2000-01-01         NaN
2000-01-02         NaN
2000-01-03         NaN
2000-01-04         NaN
2000-01-05   -1.037870
2000-01-06   -0.767705
2000-01-07   -0.383197
2000-01-08   -0.395513
2000-01-09   -0.558440
2000-01-10   -0.672416
Freq: D, dtype: float64

在我的具体情况下,使用 5 作为窗口将采用 2000-01-01 到 2000-01-05 的平均值,并在 2000-01-06 上显示它。

下面是一个比较有代表性的例子:

Team     1994    1995    1996    1997    1998    1999
Team 1     4        1      4       10      2       1
Team 2     2        5      1        2      1       4
Team 3     4        1      7        3      9       4

采用过去 3 个赛季的滚动平均值会像这样:

Team    1994    1995    1996    1997    1998    1999
Team 1   Nan     Nan     Nan    3.00    5.00    5.33
Team 2   Nan     Nan     Nan    2.67    2.67    1.33
Team 3   Nan     Nan     Nan    4.00    3.67    6.33

最佳答案

如果我理解正确,那么:

ser.rolling(window=5, win_type='triang').mean().shift()

应该这样做。


根据您的综合示例

设置数据框

text = """Team     1994    1995    1996    1997    1998    1999
Team 1     4        1      4       10      2       1
Team 2     2        5      1        2      1       4
Team 3     4        1      7        3      9       4"""

df = pd.read_csv(StringIO(text), delimiter='\s{2,}', engine='python', index_col=0)

解决方案

print df.T.rolling(3).mean().shift().T

        1994  1995  1996      1997      1998      1999
Team                                                  
Team 1   NaN   NaN   NaN  3.000000  5.000000  5.333333
Team 2   NaN   NaN   NaN  2.666667  2.666667  1.333333
Team 3   NaN   NaN   NaN  4.000000  3.666667  6.333333

关于python - 如何在 Pandas 中使用滚动不包含最后一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37373055/

相关文章:

pandas - Dask:将 dask.DataFrame 转换为 xarray.Dataset

Python Pandas : Multi-Column Pivot and Level Swapping

python - 从下拉列表中选择选项后如何抓取数据框?

Python Pandas - 在以下单元格为空白的列中填写文本值

python - 如何避免覆盖 Python 中的信号处理程序?

python - 如何分组并取一列的计数除以 python pandas 中数据框第二列的唯一计数?

python - 无法将 Python 文件作为 .exe 文件运行,出现错误 'ModuleNotFoundError: No module named ' pandas' '

python - 在守护进程中运行 ffmpeg 时出现错误

python - 使用列表中的索引替换字符串中的每个字符

python - 将 pandas 数据框转换为 pandas 系列