Pandas - 直接将移动平均列从分组依据添加到数据框
Pandas - directly add moving average columns from group by to dataframe
我有一个包含以下列的数据框:
name, date, day_index, value
我想将第 4 列添加到同一数据框,这是每个名称的第 3 列(值)的指数加权移动平均值,按第一个日期排序,然后 day_index。我可以使用以下代码将其生成为一个系列。
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'
此时,我正在考虑将系列转换为数据框,然后合并。但我相信一定有更好的方法。
以下方法有效:
df['ecw'] = model_df.groupby('name')['value'].apply(lambda x:
x.ewm(halflife=2).mean())
我仍然对为什么不能在 Lambda 函数中引用 'value' 列感到困惑。
我有一个包含以下列的数据框:
name, date, day_index, value
我想将第 4 列添加到同一数据框,这是每个名称的第 3 列(值)的指数加权移动平均值,按第一个日期排序,然后 day_index。我可以使用以下代码将其生成为一个系列。
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'
此时,我正在考虑将系列转换为数据框,然后合并。但我相信一定有更好的方法。
以下方法有效:
df['ecw'] = model_df.groupby('name')['value'].apply(lambda x:
x.ewm(halflife=2).mean())
我仍然对为什么不能在 Lambda 函数中引用 'value' 列感到困惑。