在pandas中,将GroupBy的平均结果作为新列添加

6

我有一个数据框,其中给出每个指标的上限和下限值如下

    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个回答

15

你可以通过使用groupbytransformmean进行分组。

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

1
感谢您加入reset_index部分,其他答案中缺少了这一部分。 - khhc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接