如何在pandas数据帧中使用groupby来获取以下数据的均值?

时间:2018-06-06 20:39:27

标签: python pandas pandas-groupby

我的数据如下所示,数据框中的数值是数量,而红色'黄色'绿色'是类别

items  place     red     green   yellow  
a      VA         1       7       9
b      VA         3       0       19
c      VA         5       1        0
d      VA         11      3        4
e      VA         2       2        1
a      NJ         0       0        3
b      NJ         3       0        9
c      NJ         2       4        0
d      NJ         0       5        6
e      NJ         2       7        1
a      MO         0       0        5
b      MO         1       0        4
c      MO         1       4        0
d      MO         0       0        5
e      MO         1       7        1

对于每个地方类别组合,我想计算所有5个项目(a,b,c,d,e)中这些数量的平均值,

category  place  Avg_quantity
red        VA     ..
green      VA .   ..
yellow     VA     ..
 red       NJ     ..
green      NJ     ..
yellow     NJ     ..
 red       MO     ..
green      MO     ..
yellow     MO     ..

3 个答案:

答案 0 :(得分:3)

您可以groupby mean然后melt

df.groupby('place')[['red','green','yellow']].mean().reset_index().melt('place')
Out[576]: 
  place variable  value
0    MO      red    0.6
1    NJ      red    1.4
2    VA      red    4.4
3    MO    green    2.2
4    NJ    green    3.2
5    VA    green    2.6
6    MO   yellow    3.0
7    NJ   yellow    3.8
8    VA   yellow    6.6

答案 1 :(得分:2)

您需要stack数据,然后groupby他们才能找到mean

data = df.set_index(['items', 'place']).stack().rename_axis(['items', 'place', 'category']).reset_index(name='value')
data.groupby(['category', 'place'])['value'].mean().reset_index(name='avg_quantity')

输出:

     category place avg_quantity
0    green    MO    2.2
1    green    NJ    3.2
2    green    VA    2.6
3      red    MO    0.6
4      red    NJ    1.4
5      red    VA    4.4
6   yellow    MO    3.0
7   yellow    NJ    3.8
8   yellow    VA    6.6

答案 2 :(得分:1)

您只需要groupby + mean + stack

df.groupby('place').mean().stack().rename_axis(['name', 'color']).to_frame('avg').reset_index()

输出

  place   color  avg
0    MO     red  0.6
1    MO   green  2.2
2    MO  yellow  3.0
3    NJ     red  1.4
4    NJ   green  3.2
5    NJ  yellow  3.8
6    VA     red  4.4
7    VA   green  2.6
8    VA  yellow  6.6