我的目標是制作一個在兩天內具有滾動平均值的資料透視表。我將 pivot_table() 與 aggfunc='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]})
目前我只知道如何為每天的平均值執行資料透視表,如下所示:
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],})
非常感謝你的幫助 :)
uj5u.com熱心網友回復:
第一個聚合sum和counts for 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/345064.html
