【问题标题】:python pandas dataframe groupby values and plots multiple graphspython pandas dataframe groupby 值并绘制多个图
【发布时间】:2017-04-19 05:04:54
【问题描述】:

现在我有一个像下面这样的大熊猫数据框,整个数据行是 2923922。 我想生成多个线图。 GYEAR 范围是 1963 到 1999,COUNTRY 值是非美国和美国。 PATENT 是代码,CAT 是分类值。 我希望 x 轴为 GYEAR,y 轴为专利数量,并按“Us”/“Non-Us”/Total 绘制线,另一个绘制线为“Other”/“Mechanical”/“Drugs & Medical” .我该如何绘制它?

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

【问题讨论】:

  • 您的绘图代码工作正常。我想你的意思是说它没有达到你想要的效果。

标签: python pandas plot


【解决方案1】:

我认为您需要crosstab 来使用plot 重塑:

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

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 2017-03-07
    • 1970-01-01
    • 2021-09-11
    • 2019-02-13
    • 2016-03-17
    • 2017-01-28
    • 2021-05-16
    • 2019-06-12
    相关资源
    最近更新 更多