熊猫数据框:按两列分组,然后对第三列取平均值

时间:2019-05-17 17:36:13

标签: python python-3.x dataframe group-by

我有一个类似于以下示例的数据框:

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
'''

1 个答案:

答案 0 :(得分:1)

为此:

   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