2017-04-19 6 views
3

Jetzt habe ich einen großen Pandas Datenrahmen wie unten und ganze Daten Zeile ist 2923922. Ich möchte mehrere Liniendiagramme erstellen. GYEAR Bereich ist 1963 bis 1999 und COUNTRY Werte sind nicht-US und US. und PATENT ist CODE, CAT ist kategorische Werte. Ich möchte die x-Achse als GYEAR und die y-Achse als Anzahl der Patente und Plotlinien nach 'Us'/'Non-Us'/Total und die anderen Plotlinien nach 'Other'/'Mechanical'/'Drugs & Medical ". Wie kann ich es grafisch darstellen?python pandas dataframe groupby Werte und plots mehrere Graphen

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

habe ich versucht, diese Codes, aber es hat nicht funktioniert. Bitte geben Sie mir einen Rat !!

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

Ihr Plotcode funktioniert einwandfrei. Ich denke, du meinst zu sagen, es hat nicht getan, was du wolltest. – jprockbelly

Antwort

2

Ich glaube, Sie brauchen crosstab für mit plot umformen:

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

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

Alternative Lösung mit size aggregieren und umformen von 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()