将GroupBy平均结果添加为pandas中的新列 [英] Add GroupBy mean result as a new column in pandas

查看:322
本文介绍了将GroupBy平均结果添加为pandas中的新列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据框,它给出了每个指标的上限值和下限值

I have a dataframe that gives upper and lower values of each indicator as follows

    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])

我想删除上限值和下限值,并用两个值的平均值代替.

I want to remove the upper and lower values and replace that with the mean of two values.

我该怎么做?

推荐答案

您可以通过mean使用groupbytransform.

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:

If you want the index as a column instead, call reset_index:

df = df.reset_index()
df
     indicator  value  year
0  indicator 1  11.25  2014
1  indicator 2  14.30  2015

这篇关于将GroupBy平均结果添加为pandas中的新列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆