2017-05-07 10 views
0

私はプロットしようとしている2つの列、カテゴリと年を持っています。私は、複数のクラスの時系列プロットを作成するために、各カテゴリ毎の合計をとってみようとしています。時間をかけてカテゴリ別にプロットする方法

ax = data[data.categorical=="cat1"]["categorical"].plot(label='cat1') 
data[data.categorical=="cat2"]["categorical"].plot(ax=ax, label='cat3') 
data[data.categorical=="cat3"]["categorical"].plot(ax=ax, label='cat3') 
plt.xlabel("Year") 
plt.ylabel("Number per category") 
sns.despine() 

プロットする数値データがありません。上記のようなものを探しています。data[data.categorical=="cat3"]["categorical"].lambda x : (1 for x in data.categorical)

例として以下のリストを使用します。

categorical = ["cat1","cat1","cat2","cat3","cat2","cat1","cat3","cat2","cat1","cat3","cat3","cat3","cat2","cat1","cat2","cat3","cat2","cat2","cat3","cat1","cat1","cat1","cat3"] 

year = [2013,2014,2013,2015,2014,2014,2013,2014,2014,2015,2015,2013,2014,2014,2013,2014,2015,2015,2015,2013,2014,2015,2013] 

私の目標は、あなたがGROUPBYを試してみました enter image description here

+1

完全なトレースバックエラーといくつかのサンプルデータを提供できますか? – Chuck

+0

はい、申し訳ありません。今はっきりしているはずです。 – Min

+0

意味がありません: 'data [data.categorical ==" cat2 "] [" categorical "]'は値として '' cat2 ''のみを持つ一連の文字列です。それをプロットすることはできません。 – IanS

答えて

0

次の図のようなものを得ることがありますか?

df.groupby(["year","categorical"]).count() 
+0

はい、以前は行いましたが、plt.plot(df.groupby(["year"、 "categorical])count())は 'tuple'オブジェクトが呼び出し可能ではない ' – Min

+0

を返します。例えば、df ["count"])df ["categorical"]をgroupbyの前に追加します。groupbyの後では、locの上でcat1だけを選択し、その1つを印刷しようとします – Herka

1

それは基本的にあなたがあなたの中に配置した時系列プロットを見られるのと同じドキュメントで説明されている基本的なパンダの機能のほんの要約、だと私は、「ソリューション」これを呼び出すことがためらわ役職。しかし、groupbyの周りに混乱があり、プロットをしているのを見て、デモは物事を明確にするのに役立つかもしれません。

groupby()を2回呼び出すことができます。
最初のgroupby()は、countアグリゲーションを使用して、1年あたりのカテゴリ出現回数を取得します。
第2のgroupby()は、各カテゴリの時系列をプロットするために使用されます。年間、カテゴリごとにカウントを取得今

import pandas as pd 
categorical = ["cat1","cat1","cat2","cat3","cat2","cat1","cat3","cat2", 
       "cat1","cat3","cat3","cat3","cat2","cat1","cat2","cat3", 
       "cat2","cat2","cat3","cat1","cat1","cat1","cat3"] 
year = [2013,2014,2013,2015,2014,2014,2013,2014,2014,2015,2015,2013, 
     2014,2014,2013,2014,2015,2015,2015,2013,2014,2015,2013] 
df = pd.DataFrame({'categorical':categorical, 
        'year':year}) 

    categorical year 
0  cat1 2013 
1  cat1 2014 
       ... 
21  cat1 2015 
22  cat3 2013 

:色をキーと各カテゴリの

# reset_index() gives a column for counting, after groupby uses year and category 
ctdf = (df.reset_index() 
      .groupby(['year','categorical'], as_index=False) 
      .count() 
      # rename isn't strictly necessary here, it's just for readability 
      .rename(columns={'index':'ct'}) 
     ) 

    year categorical ct 
0 2013  cat1 2 
1 2013  cat2 2 
2 2013  cat3 3 
3 2014  cat1 5 
4 2014  cat2 3 
5 2014  cat3 1 
6 2015  cat1 1 
7 2015  cat2 2 
8 2015  cat3 4 

最後に、プロット時系列、:

をサンプルデータフレームを生成し、起動するには

from matplotlib import pyplot as plt 
fig, ax = plt.subplots() 

# key gives the group name (i.e. category), data gives the actual values 
for key, data in ctdf.groupby('categorical'): 
    data.plot(x='year', y='ct', ax=ax, label=key) 

time series plot by category

関連する問題