【发布时间】:2019-12-17 07:56:57
【问题描述】:
我有一个数据框,我正在尝试计算我的价值列的年初至今平均值。下面是一个示例数据框。
date name values values2
0 2019-01-01 a 1 1
1 2019-02-01 a 3 3
2 2019-03-01 a 2 2
3 2019-04-01 a 6 2
我想创建新列(values_ytd 和 values2_ytd),以平均从 1 月到同一年中最近一段时间的值(示例数据中的 4 月)。在计算平均值时,我需要按 year & name 对数据进行分组。我正在寻找与此类似的输出。
date name values values2 values2_ytd values_ytd
0 2019-01-01 a 1 1 1 1
1 2019-02-01 a 3 3 2 2
2 2019-03-01 a 2 2 2 2
3 2019-04-01 a 6 2 2 3
我尝试使用expanding().mean() 失败了,但很可能我做错了。我的主要数据框有许多名称类别和更多列。这是我尝试使用的代码
df1.groupby([df1['name'], df1['date'].dt.year], as_index=False).expanding().mean().loc[:, 'values':'values2'].add_suffix('_ytd').reset_index(drop=True,level=0)
但收到以下错误。
NotImplementedError: ops for Expanding for this dtype datetime64[ns] are not implemented
注意:下面的代码在用 cumsum() 替换 .expanding().mean() 以创建年初至今的值总和时完美运行,但我无法计算平均值
df1.groupby([df1['name'], df1['date'].dt.year], as_index=False).cumsum().loc[:, 'values':'values2'].add_suffix('_ytd').reset_index(drop=True,level=0)
非常感谢任何帮助。
【问题讨论】:
标签: python pandas dataframe pandas-groupby