在枢轴 table 中随时间创建滚动平均值

Creating a rolling mean over time in a pivot table

我的目标是用两天的滚动平均值制作一个支点 table。我将 pivot_table() 与 aggfunc='mean' 一起使用,因此我得到了每天的平均值。此外,我需要调整 mean 函数以将前一天也纳入平均值的计算中。这是一些示例数据:

df = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-02', '2021-01-03', '2021-01-03', '2021-01-03'],
    'Name':['Tim', 'Tim', 'Ben', 'Leo', 'Tim', 'Ben', 'Leo', 'Leo', 'Ben', 'Tim'], 
    'Ratings':[9.0, 8.0, 5.0, 3.0, 'NaN', 'NaN', 6, 5, 3, 5]})  

目前我只知道如何对每一天​​的平均值执行枢轴 table,如下所示:

df.pivot_table(
        values='Ratings', index='Date', columns='Name',
        fill_value=0, aggfunc='mean')

但我想找出一种方法来获得两天的移动平均线,如下所示:

df = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-02', '2021-01-03'],
    'Tim':[8.5, 8.5, 5], 
    'Ben':[5, 5, 3],
    'Leo':['NaN', 4.5, 4.66],})

非常感谢您的帮助:)

首先聚合 sumcounts 用于 MultiIndex,使用滚动 sum 求和和计数求和,最后求均值使用除法:

df['Date'] = pd.to_datetime(df['Date'])

df = df.pivot_table(
        values='Ratings', index='Date', columns='Name',
        aggfunc=['sum','count'])

df = df.rolling('2d').sum()
df = df.xs('sum', axis=1, level=0).div(df.xs('count', axis=1, level=0))
print (df)
Name        Ben       Leo  Tim
Date                          
2021-01-01  5.0       NaN  8.5
2021-01-02  5.0  4.500000  8.5
2021-01-03  3.0  4.666667  5.0