2017-04-19 106 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()