在枢轴 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],})
非常感谢您的帮助:)
首先聚合 sum
和 count
s 用于 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
我的目标是用两天的滚动平均值制作一个支点 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],})
非常感谢您的帮助:)
首先聚合 sum
和 count
s 用于 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