【问题标题】:How to group datas in a list of dict by keys?如何按键对字典列表中的数据进行分组?
【发布时间】:2020-03-03 06:45:42
【问题描述】:

我有一个字典列表,每一个都与一个学生有关。我想创建一个按学期按每门课程分组的表格,并具有与每一行相关的值的平均值。

课程 - 学期 - 平均数

当我使用函数 .groupby() 时,它不起作用,但我找不到该怎么做。

我的清单的一部分:

[{'matricule': '22000803', 'nom': 'Boyer,André', 'note': 'C+', 'valeur': 2.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
 {'matricule': '22000829', 'nom': 'Keighan,Maylis', 'note': 'A+', 'valeur': 4.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
 {'matricule': '22000869', 'nom': 'Lahaie,Lyes', 'note': 'B+', 'valeur': 3.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
 {'matricule': '22000973', 'nom': 'Conerardy,Rawaa', 'note': 'B+', 'valeur': 3.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
 {'matricule': '22001034', 'nom': 'Naftanaila,Carla', 'note': 'B+', 'valeur': 3.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'}]

我试过这个:

tableau = info.groupby(["Cours","Trimestre"])[["Valeur"]].mean()

但答案是: 'list' 对象没有属性 'groupby'

【问题讨论】:

    标签: json list dataframe dictionary group-by


    【解决方案1】:

    你首先需要创建一个DataFrame。你可以使用pd.DataFrame.from_dict:

    df=pd.DataFrame.from_dict(my_list)
    print(df)
    

    输出

      matricule               nom note valeur  \
    0  22000803      Boyer,André   C+    2.3   
    1  22000829    Keighan,Maylis   A+    4.3   
    2  22000869       Lahaie,Lyes   B+    3.3   
    3  22000973   Conerardy,Rawaa   B+    3.3   
    4  22001034  Naftanaila,Carla   B+    3.3   
    
                                       titre       sigle trimestre  
    0  La cybersécurité et le gestionnaire  TECH 20701     H2005  
    1  La cybersécurité et le gestionnaire  TECH 20701     H2005  
    2  La cybersécurité et le gestionnaire  TECH 20701     H2005  
    3  La cybersécurité et le gestionnaire  TECH 20701     H2005  
    4  La cybersécurité et le gestionnaire  TECH 20701     H2005  
    

    my_list 是您的列表:

    my_list=[{'matricule': '22000803', 'nom': 'Boyer,André', 'note': 'C+', 'valeur': 2.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
     {'matricule': '22000829', 'nom': 'Keighan,Maylis', 'note': 'A+', 'valeur': 4.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
     {'matricule': '22000869', 'nom': 'Lahaie,Lyes', 'note': 'B+', 'valeur': 3.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
     {'matricule': '22000973', 'nom': 'Conerardy,Rawaa', 'note': 'B+', 'valeur': 3.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'},
     {'matricule': '22001034', 'nom': 'Naftanaila,Carla', 'note': 'B+', 'valeur': 3.3, 'titre': 'La cybersécurité et le gestionnaire', 'sigle': 'TECH 20701', 'trimestre': 'H2005'}]
    

    现在您可以使用groupby您只能按列中存在的列标签进行分组(课程不存在)

    df_means=df.groupby(['matricule','trimestre'],as_index=False).valeur.mean()
    print(df_means)
    

    输出:

      matricule trimestre  valeur
    0  22000803     H2005     2.3
    1  22000829     H2005     4.3
    2  22000869     H2005     3.3
    3  22000973     H2005     3.3
    4  22001034     H2005     3.3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多