2017-04-19 105 views
3

現在我有一個像下面這樣的大熊貓數據框,整個數據行是2923922. 我想生成多個線圖。 GYEAR的範圍是1963年到1999年,國家值是非美國和美國。並且PATENT是CODE,CAT是分類值。 我希望X軸爲GYEAR,Y軸爲'Us'/'Non-Us'/ Total的專利和情節數量,另一個情節爲'其他'/'Mechanical'/'藥品&醫療」。我如何繪製它?python熊貓數據框groupby值和繪製多個圖

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 

sample 1

sample2

我嘗試了這些代碼,但沒有奏效。 請給我一些建議!

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

我認爲你需要crosstabplot重塑:

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

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

替代解決方案與聚集size,重塑通過unstack

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()