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

3
我有以下数据,数据框中的值是数量,而“红色”,“黄色”和“绿色”是类别
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个回答

3

您可以使用 groupby 来进行分组平均,然后再使用 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

2
你需要将数据进行堆叠,然后通过分组找到平均值
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

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

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