あなたが特定の日付の前にすべての日の時間による平均をしたい...
それはあなたが望むものを100%明確ではないのですが、ここで私が作った仮定があります。このコードは...
import pandas as pd
import numpy as np
import datetime
# build a sample table
np.random.seed(1)
values = np.random.choice(range(1, 11), 25)
dates = np.random.choice(pd.date_range(datetime.date(2016, 1, 1), datetime.date(2016, 1, 4)), 25)
hours = np.random.choice(range(4), 25)
df = pd.DataFrame({'date': dates, 'hour': hours, 'value': values})
DFがこのようになっていることを...
date hour value
0 2016-01-03 1 6
1 2016-01-01 2 9
2 2016-01-03 2 10
3 2016-01-02 0 6
4 2016-01-03 3 1
5 2016-01-01 3 1
6 2016-01-04 1 2
7 2016-01-01 1 8
8 2016-01-03 3 7
9 2016-01-01 2 10
は、今あなたがしたい変換のために...
df.sort_values(['date', 'hour'], inplace=True)
groups = df.groupby(['hour'])
# calculate the rolling mean and sub out the current day's value then...
# divide by count of previous observations (works because cumcount is base 0)
df['rolling_mean'] = (groups.transform(np.cumsum)['value'] - df.value)/(groups.cumcount())
# just to show result
df.sort_values(['hour', 'date'])
結果は...
あるん
date hour value rolling_mean
3 2016-01-02 0 6 NaN
7 2016-01-01 1 8 NaN
0 2016-01-03 1 6 8.0
6 2016-01-04 1 2 7.0
1 2016-01-01 2 9 NaN
9 2016-01-01 2 10 9.0
2 2016-01-03 2 10 9.5
5 2016-01-01 3 1 NaN
4 2016-01-03 3 1 1.0
8 2016-01-03 3 7 1.0
NaNで必要なことを行うまで...
うわー、うまくいった!ありがとう! @ブルースプッチー – sndrosilva