У меня есть мультииндекс, основанный на дате и времени (сгруппированный по времени).Данные выглядят следующим образом:
r2 var_v2x _s
date time
2017-10-02 08:05:00 0.00000031 0.00008784 0.00353914
2017-10-03 08:05:00 0.00000008 0.00009055 0.00085233
2017-10-04 08:05:00 0.00000000 0.00018774 0.00000000
2017-10-05 08:05:00 0.00000031 0.00007609 0.00409934
и за другой период времени:
r2 var_v2x _s
date time
2017-10-02 08:30:00 0.00000000 0.00008784 0.00000000
2017-10-03 08:30:00 0.00000008 0.00009055 0.00085375
2017-10-04 08:30:00 0.00000008 0.00018774 0.00041180
2017-10-05 08:30:00 0.00000000 0.00007609 0.00000000
2017-10-10 08:30:00 0.00000008 0.00006900 0.00112288
Теперь я хочу применить скользящее среднее к столбцу _s
с саморасширяющимся скользящим окном.Это означает, что для первого наблюдения в группе скользящее окно равно 1 (так что просто значение, 2-е наблюдение включает 1-е и 2-е значение столбца _s
и т. Д.
В конце я хочу получитьнесгруппированные dataframe
как:
r2 var_v2x _s s_rolling
date time
2017-10-02 08:05:00 0.00000031 0.00008784 0.00353914 0.00353914
2017-10-02 08:10:00 0.00000024 0.00008784 0.00249531 rolling(2)
2017-10-02 08:15:00 0.00000024 0.00008784 0.00249531 rolling(3)
2017-10-02 08:20:00 0.00000024 0.00008784 0.00249531 rolling(4)
Пока у меня есть это:
`file_name = r'E:\Model\ModelSpecific\Index_shat.txt'
df = pd.read_csv(file_name, parse_dates=[0], index_col=None, sep=',')
list_date = sorted(set(df['Date']))
list_time = sorted(set(df['Time']))
iterables = [list_date, list_time]
indexed = pd.MultiIndex.from_product(iterables, names=['date', 'time'])
df = df.set_index(indexed)
df = df.dropna()
df['_s'] = df['r2']/df['var_v2x']
for date, new_df in enumerate(df.groupby(level=1)):
new_df = pd.DataFrame(new_df)
new_df['rolling_s'] = new_df.expanding().mean()
print(new_df)
Но возвращает: ValueError: Неверное количество пропущенных элементов 3, размещение подразумевает 1.
Я также пытался enumerate(df.groupby(level=1)):
Но возвращает: AttributeError: у объекта 'tuple' нет атрибута 'roll'