将 GroupBy 平均结果添加为 pandas 中的新列
Posted
技术标签:
【中文标题】将 GroupBy 平均结果添加为 pandas 中的新列【英文标题】:Add GroupBy mean result as a new column in pandas 【发布时间】:2018-02-23 01:35:54 【问题描述】:我有一个数据框,它给出了每个指标的上限和下限,如下所示
df = pd.DataFrame(
'indicator': ['indicator 1', 'indicator 1', 'indicator 2', 'indicator 2'],
'year':[2014,2014,2015,2015],
'value type': ['upper', 'lower', 'upper', 'lower'],
'value':[12.3, 10.2, 15.4, 13.2]
,
index=[1,2,3,4])
我想删除上限值和下限值,并将其替换为两个值的平均值。
我该怎么做?
【问题讨论】:
【参考方案1】:你可以通过mean
groupby
和transform
。
df['value'] = df.groupby('indicator')['value'].transform('mean')
df
indicator value value type year
1 indicator 1 11.25 upper 2014
2 indicator 1 11.25 lower 2014
3 indicator 2 14.30 upper 2015
4 indicator 2 14.30 lower 2015
或者,如果您希望每个指标只有一行,请使用agg
。
df = df.groupby('indicator').agg('mean')
df
value year
indicator
indicator 1 11.25 2014
indicator 2 14.30 2015
如果您希望将索引改为列,请调用reset_index
:
df = df.reset_index()
df
indicator value year
0 indicator 1 11.25 2014
1 indicator 2 14.30 2015
【讨论】:
感谢您输入 reset_index 部分,其他几个答案中都缺少它。以上是关于将 GroupBy 平均结果添加为 pandas 中的新列的主要内容,如果未能解决你的问题,请参考以下文章
将 groupby 平均统计数据映射为 pandas 中的新列
pandas如何使用groupby [duplicate]将NaN值替换为平均值