Ok, donc j'ai un cadre de données qui contient des données de séries temporelles ayant un index multiligne pour chaque colonne. Voici un exemple de ce à quoi ressemblent les données et au format CSV. Le chargement des données n'est pas un problème ici.
Ce que je veux faire, c'est pouvoir créer une boîte à moustaches avec ces données regroupées selon différentes catégories dans une ligne spécifique du multiinex. Par exemple, si je groupais par "ESPÈCES", j'aurais les groupes "aq", "gr", "mix", "sed" et une case pour chaque groupe à un moment donné de la série chronologique.
J'ai essayé ceci:
grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES')
grouped.boxplot()
mais cela me donne une boîte à moustaches (ligne plate) pour chaque point du groupe plutôt que pour l'ensemble groupé. Y a-t-il un moyen facile de faire ceci? Je n'ai aucun problème à grouper car je peux regrouper les groupes de la manière que je veux, mais je ne suis pas sûr de ce que je fais de mal avec cette boîte à moustaches.
Toute aide serait appréciée.
Je pense que j'ai compris, peut-être que cela pourrait aider quelqu'un:
grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES').T
grouped.boxplot()
Fondamentalement, la sortie groupby devait être transposée de sorte que la boîte à moustaches présente le bon groupement:
ce code:
data['2013-08-17'].boxplot(by='SPECIES')
Ne fonctionnera pas, car boxplot est une fonction pour un DataFrame et non une série.
Dans Pandas> 0.18.1, la fonction Boxplot a l'argument columns
qui définit à partir de quelle colonne sont extraites les données.
Alors
data.boxplot(column='2013-08-17',by='SPECIES')
devrait renvoyer le résultat souhaité.
Un exemple avec le jeu de données Iris:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.read_csv('https://raw.githubusercontent.com/pandas-dev/pandas/master/pandas/tests/data/iris.csv')
fig, ax = plt.subplots(figsize=(10,8))
plt.suptitle('')
data.boxplot(column=['SepalLength'], by='Name', ax=ax)
crée:
plt.suptitle('')
désactive le sous-titre automatique ennuyeux. Et bien sûr, les arguments de colonne acceptent des listes de colonnes ... donc
data.boxplot(column=['SepalLength', 'SepalWidth'], by='Name', ax=ax)
fonctionne aussi.
Cela devrait fonctionner dans la version 0.16:
data['2013-08-17'].boxplot(by='SPECIES')