GOOGLE ADS

samedi 30 avril 2022

Stocker des séries avec différentes longueurs dans la boucle for

Le df original est comme ci-dessous:

Hour Count
0 15
0 0
0 0
0 17
0 18
0 12
1 55
1 0
1 0
1 0
1 53
1 51
...

Je parcourais ce df heure par heure et supprimais Count = 0 à cette heure, puis dessinais une boîte à moustaches de Count à cette heure. Ensuite, je me suis retrouvé avec 24 graphiques.

Puis-je mettre ces 24 boîtes à moustaches sur le même graphique lors d'une boucle? Par exemple, obtenir une sortie df2 comme ci-dessous et utiliser plt.boxplot(df2), mais je ne sais pas si cela provoquera une erreur.

 Hour=0 Hour=1...
0 15 55
1 17 53
2 18 51
3 12 Nan

Une autre chose est qu'après avoir supprimé 0, chaque heure a une longueur de données différente dans Count. Comment ajouter ces données et obtenir un df2 comme ci-dessus ?

Vous pouvez utiliser le code ci-dessous pour df d'origine :

df = pd.DataFrame({
'Hour': {0:1, 1:1, 2:1, 3:1, 4:1, 5:1, 6:2, 7:2, 8:2, 9:2, 10:2, 11:2},
'Count': {0:15, 1:0, 2:0, 3:17, 4:18, 5:12, 6:55, 7:0, 8:0, 9:0, 10:53, 11:51}})

Voici le code pour créer des boîtes à moustaches horaires :

for i in range(2):
table1 = df[df['Hour'] == i]
table2 = table1[table1['large_cnt']!= 0]
fig = plt.figure(1, figsize=(9, 6))
plt.boxplot(table2['large_cnt'])
plt.show()


Solution du problème

Une option consiste à pivotfiltrer le DataFrame et à tracerboxplot :

df.query('Count!=0').assign(i=lambda x: x.groupby('Hour').cumcount()).pivot('i', 'Hour', 'Count').boxplot();

entrez la description de l'image ici

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...