わかりましたので、各列の複数行インデックスを持つ時系列データを含むデータフレームがあります。以下はデータがどのように見えるかのサンプルで、csv形式です。ここでは、データの読み込みは問題ではありません。
私がやりたいのは、multiinexの特定の行のさまざまなカテゴリに従ってグループ化されたこのデータで箱ひげ図を作成できるようにすることです。たとえば、「SPECIES」でグループ化する場合、グループ「aq」、「gr」、「mix」、「sed」、および時系列の特定の時間の各グループのボックスがあります。
私はこれを試しました:
grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES')
grouped.boxplot()
しかし、グループ化されたセットではなく、グループ内の各ポイントの箱ひげ図(フラットライン)が表示されます。これを行う簡単な方法はありますか?私はグループ化するのに何の問題もありませんが、どのようにでもグループを集約できますが、このボックスプロットで何が間違っているのかわかりません。
任意の助けをいただければ幸いです。
私はそれを理解したと思う、おそらくこれは誰かに役立つでしょう:
grouped = data['2013-08-17'].groupby(axis=1, level='SPECIES').T
grouped.boxplot()
基本的に、グループプロットの出力は、箱ひげ図が正しいグループ化を示すように転置する必要がありました。
このコード:
data['2013-08-17'].boxplot(by='SPECIES')
BoxplotはDataFrameの関数であり、Seriesではないため、機能しません。
Pandas> 0.18.1)では、boxplot関数には引数columns
があり、これはデータの取得元の列を定義します。
そう
data.boxplot(column='2013-08-17',by='SPECIES')
目的の結果を返す必要があります。
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)
作成:
plt.suptitle('')
迷惑な自動字幕をオフにします。そしてもちろん、列引数は列のリストを受け入れます...
data.boxplot(column=['SepalLength', 'SepalWidth'], by='Name', ax=ax)
動作します。
これは、バージョン0.16で動作するはずです。
data['2013-08-17'].boxplot(by='SPECIES')