2017-04-19 22 views
3

今私は以下のような巨大なパンダのデータフレームを持っており、データの行全体は2923922です。 私は複数のラインプロットを生成したいと思います。 GYEARの範囲は1963年から1999年で、COUNTRYの値は米国以外の米国です。 PATENTはCODE、CATはカテゴリ値です。 x軸をGYEAR、y軸を 'Us'/'Non-Us'/Totalと 'Other'/'Mechanical'/'Drugs'の別のプロットラインとする特許番号とプロットラインを& Medical 'どうすればグラフ化できますか? python pandasデータフレームgroupby値と複数のグラフをプロット

sample2

sample 1

GYEAR COUNTRY PATENT CAT 
0 1963 Non-US 3070801 Other 
1 1963 US 3070802 Other 
2 1963 US 3070803 Other 
3 1966 US 3070804 Other 
4 1966 US 3070805 Other 
5 1967 US 3070806 Other 
6 1970 US 3070807 Drugs & Medical 
7 1970 US 3070808 Drugs & Medical 
8 1963 US 3070809 Other 
9 1965 US 3070810 Other 
10 1965 US 3070811 Other 
11 1964 US 3070812 Other 
12 1964 US 3070813 Other 
13 1964 US 3070814 Mechanical 
14 1964 US 3070815 Mechanical 
15 1998 US 3070816 Mechanical 
16 1998 US 3070817 Mechanical 
17 1998 US 3070818 Other 
18 1999 US 3070819 Other 

は、私はこれらのコードを試してみましたが、それはうまくいきませんでした。 私にいくつかアドバイスをください!

us = df1[(df1['COUNTRY'] == 'US')] 
nonus = df1[(df1['COUNTRY'] != 'US')] 

plt.plot(us['GYEAR'], us['PATENT'], linewidth='4', color ='k',label='US') 
plt.plot(nonus['GYEAR'], nonus['PATENT'], linewidth='1', color ='b',label='Non-US') 
+1

あなたのプロットコードは正常に動作します。私はあなたが望んだことをしなかったと言っていると思います。 – jprockbelly

答えて

2

私はあなたがplotとリシェイプためcrosstabが必要だと思う:

pd.crosstab(df['GYEAR'], df['CAT']).plot() 

df2 = pd.crosstab(df['GYEAR'], df['COUNTRY']) 
df2['Total'] = df2.sum(axis=1) 
df2.plot() 

sizeunstackによって再形成を集約するとともに、代替ソリューション:

df.groupby(['GYEAR','CAT']).size().unstack(fill_value=0).plot() 


df2 = df.groupby(['GYEAR','COUNTRY']).size().unstack(fill_value=0) 
df2['Total'] = df2.sum(axis=1) 
df2.plot() 
関連する問題