我的数据如下所示,数据框中的数值是数量,而红色'黄色'绿色'是类别
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 ..
答案 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