Pandas - напрямую добавляет столбцы скользящего среднего из группы в датафрейм - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть датафрейм со следующими столбцами:

name, date, day_index, value

Я хочу добавить 4-й столбец к тому же фрейму данных, который является экспоненциально взвешенным скользящим средним 3-го столбца (значения) для каждого имени, отсортированный по первой дате, а затем по дневному индексу. Я могу сгенерировать это как серию, используя следующий код.

df.sort_values(['date','day_index'],inplace=True)

ecw_series = df.groupby('name').apply(lambda x: 
x["value"].ewm(halflife=2).mean())

Однако, если я пытаюсь напрямую добавить это к исходному фрейму данных, я получаю следующую ошибку:

df['ecw'] =  df.groupby('name').apply(lambda x: 
x["value"].ewm(halflife=2).mean())



incompatible index of inserted column with frame index

И если я пытаюсь объединить серию с фреймом данных, я получаю следующую ошибку:

df['index'] = df.index

df = df.merge(ecw_series, left_on=['name','index'],right_index=True)

can not merge DataFrame with instance of type <class 
'pandas.core.series.Series'

В этот момент я рассматривал возможность преобразования ряда в кадр данных, а затем слияния. Но я уверен, что должен быть лучший путь.

1 Ответ

0 голосов
/ 16 сентября 2018

Работает следующий подход:

df['ecw'] = model_df.groupby('name')['value'].apply(lambda x: 
 x.ewm(halflife=2).mean())

Меня все еще немного смущает, почему вы не можете ссылаться на столбец 'value' в функции Lambda.

...