对于通过聚合将结果存储在数据帧中的两列分组,最优化的方法是什么?

2024-04-25 19:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的数据框架,它包括三列:kleurmerkprijs。我想计算每个merkkleurprijs平均值。数据如下:

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

Tags: 数据dfdatatempheadfiatmerkbeige
1条回答
网友
1楼 · 发布于 2024-04-25 19:32:37

通过聚合函数mean^{}^{}^{}by元组列表一起用于新列名:

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

相关问题 更多 >