Pandas dataframe:按两列分组,然后平均第三列

2024-06-02 07:11:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像下面的示例:

year    x   y
2016    o   227
2018    o   214
2016    o   56
2018    o   62
2018    o   87
2019    o   40
2017    r   15
2016    i   14
2016    o   88
2014    o   48

我想得到一个输出,其中y的平均值是根据年的grouby来计算的,然后进一步计算x。像这样:

year    x   y
2016    o   (227 + 56 + 88)/3 = 123.66 = 124 (Need just the final value)
2018    o   (214 + 62 + 87)/3 = 121 (Need just the final value)
2019    o   40
2017    r   15
2016    i   14
2014    o   48

我想我找到了一个方法(但我可能错了),但结果是在一个非数据帧中:

print(part_b[['year', 'x', 'y']].groupby(['year', 'x']).mean())

生成的输出:(以下输出中的结果来自我的整个数据)

            y
year x                                              
2014 o      48.000000
2016 i      14.000000
     o      117.000000
2017 o      71.000000
     r      27.500000
2018 i      23.000000
     o      97.428571
2019 i      11.000000
     o      115.500000
'''

Whereas I would like to have this:
```python
year x      y                                        
2014 o      48
2016 i      14
2016 o      117
2017 o      71
2017 r      28
2018 i      23
2018 o      97
2019 i      11
2019 o      116
'''

Tags: the数据方法示例valueneedmeanyear
1条回答
网友
1楼 · 发布于 2024-06-02 07:11:03

鉴于此:

   year category  amount
0  2015        A     200
1  2015        B    1000
2  2015        A     300
3  2016        C    1200
4  2016        A     800
5  2016        A    2500
6  2016        B     100

这样做:

df.groupby(['year','category'])['amount'].mean()

将为您提供:

    year  category
2015  A            250
      B           1000
2016  A           1650
      B            100
      C           1200
Name: amount, dtype: int64

要实现您所需要的,只需执行以下操作:

df.groupby(['year','category'])['amount'].mean().reset_index()

   year category  amount
0  2015        A     250
1  2015        B    1000
2  2016        A    1650
3  2016        B     100
4  2016        C    1200

相关问题 更多 >