【问题标题】:What is the most optimised way for group by two columns with aggregation and storing the result in a dataframe?通过聚合和将结果存储在数据框中的两列分组的最优化方法是什么?
【发布时间】:2018-08-02 13:39:39
【问题描述】:

我有一个巨大的 DataFrame,其中包括三列:kleurmerkprijs。我想为每个merk 计算每个kleurprijs 的平均值。数据如下:

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

【问题讨论】:

    标签: python pandas group-by aggregation


    【解决方案1】:

    通过聚合函数meansizegroupbyagg 通过元组列表用于新列名称:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多