Как сгруппировать данные в списке диктов по ключам? - PullRequest
1 голос
/ 06 ноября 2019

У меня есть список словарей, каждый из которых связан с одним студентом. Я хочу создать таблицу, сгруппированную по каждому курсу по семестрам, и иметь среднее значение, относящееся к каждой строке.

курс - семестр - значит

Когда я использую функцию .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'

1 Ответ

0 голосов
/ 06 ноября 2019

Сначала необходимо создать 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
...