我有一个巨大的DataFrame,其中包含三列:kleur
,merk
和prijs
。我想为每个prijs
计算每kleur
merk
的平均值。数据如下:
occasions.head(15)
kleur merk prijs
0 Zwart Peugeot 1490.0
1 Zwart Alfa Romeo 2450.0
2 Grijs Fiat 3950.0
3 Groen Hyundai 1250.0
4 Grijs Mitsubishi 1350.0
5 Grijs Nissan 5480.0
6 None Opel 5950.0
7 Zwart Peugeot 4950.0
8 Zwart Peugeot 6950.0
9 Beige Renault 4950.0
10 Groen Suzuki 2250.0
11 Geel Toyota 4980.0
12 Geel Volkswagen 2950.0
13 Blauw Volkswagen 2950.0
14 Beige Fiat 7500.0
我赞扬它是风箱:
temp = []
for merk, mk_data in occasions_prijs_df.head(10).groupby(['merk']):
for kleur, kleur_data in mk_data.groupby('kleur'):
temp.append({'merk': merk, 'kleur':kleur, 'kleur_count':kleur_data.shape[0],
'prijs_avg': kleur_data['prijs'].mean()})
print merk, kleur, kleur_data.shape[0], kleur_data['prijs'].mean()
occasions_prijs_df_gr = pd.DataFrame(temp)
输出(occasions_prijs_df_gr
)应如下所示:
kleur kleur_count merk prijs_avg
0 Zwart 1 Alfa Romeo 2450.000000
1 Grijs 1 Fiat 3950.000000
2 Groen 1 Hyundai 1250.000000
3 Grijs 1 Mitsubishi 1350.000000
4 Grijs 1 Nissan 5480.000000
5 Zwart 3 Peugeot 4463.333333
6 Beige 1 Renault 4950.000000
答案 0 :(得分:0)
通过汇总函数mean
和groupby
的新列名称,使用agg
和size
元组列表:
tup = [('prijs_avg', 'mean'), ('kleur_count','size')]
df = df.groupby(['kleur','merk'])['prijs'].agg(tup).reset_index()
print (df)
kleur merk prijs_avg kleur_count
0 Beige Fiat 7500.000000 1
1 Beige Renault 4950.000000 1
2 Blauw Volkswagen 2950.000000 1
3 Geel Toyota 4980.000000 1
4 Geel Volkswagen 2950.000000 1
5 Grijs Fiat 3950.000000 1
6 Grijs Mitsubishi 1350.000000 1
7 Grijs Nissan 5480.000000 1
8 Groen Hyundai 1250.000000 1
9 Groen Suzuki 2250.000000 1
10 None Opel 5950.000000 1
11 Zwart Alfa Romeo 2450.000000 1
12 Zwart Peugeot 4463.333333 3