web-dev-qa-db-ja.com

パンダ:複数の時系列データフレームを単一のプロットにプロット

私は次のpandas DataFrame:

     time      Group      blocks
0     1        A           4
1     2        A           7
2     3        A           12
3     4        A           17
4     5        A           21 
5     6        A           26
6     7        A           33
7     8        A           39
8     9        A           48
9     10       A           59
    ....        ....          ....
36     35      A           231
37     1       B           1
38     2       B           1.5
39     3       B           3
40     4       B           5
41     5       B           6
    ....        ....          ....
911    35      Z           349

これは、複数の時系列データを持つデータフレームで、min=1からmax=35。各Groupには、このような時系列があります。

個々の時系列A〜Zを1〜35のx軸に対してプロットしたいと思います。y軸は、それぞれのblocksになります。

Andrews Curves plot のようなものを使用することを考えていました。これは、各シリーズを互いにプロットします。各「色相」は異なるグループに設定されます。 (他のアイデアは大歓迎です。)

enter image description here

私の問題:複数のシリーズをプロットするために、このデータフレームをどのようにフォーマットしますか?列はGroupAGroupBなどである必要がありますか?

どのようにしてデータフレームを次の形式にしますか?

time GroupA blocksA GroupsB blocksB GroupsC blocksC....

これは、示されているAndrewsプロットの正しい形式ですか?

編集

私が試した場合:

df.groupby('Group').plot(legend=False)

x軸は完全に正しくありません。すべての時系列は、0から35まで、すべて1つのシリーズでプロットする必要があります。

enter image description here

これをどうやって解決しますか?

10
ShanZhengYang

このバリアントを見てください。 1つ目はAndrewsの曲線で、2つ目は1行Monthでグループ化された複数行プロットです。データフレームdataには、3つの列TemperatureDay、およびMonthが含まれます。

import pandas as pd
import statsmodels.api as sm
import matplotlib.pylab as plt
from pandas.tools.plotting import andrews_curves

data = sm.datasets.get_rdataset('airquality').data
fig, (ax1, ax2) = plt.subplots(nrows = 2, ncols = 1)
data = data[data.columns.tolist()[3:]] # use only Temp, Month, Day

# Andrews' curves
andrews_curves(data, 'Month', ax=ax1)

# multiline plot with group by
for key, grp in data.groupby(['Month']): 
    ax2.plot(grp['Day'], grp['Temp'], label = "Temp in {0:02d}".format(key))
plt.legend(loc='best')    
plt.show()

アンドリュースの曲線をプロットすると、データは1つの関数に回収されます。これは、関数が互いに近いことで表されるAndrewsの曲線が、対応するデータポイントも互いに近いことを示唆していることを意味します。

enter image description here

9
Serenity

ピボットテーブルとしてデータを再構成できます。

df.pivot_table(index='time',columns='Group',values='blocks',aggfunc='sum').plot()
2
Michael Thomas