从数据透视表绘制Pandas DataFrame

时间:2018-12-17 08:45:15

标签: python pandas matplotlib jupyter-notebook pivot-table

我正在尝试绘制线条图,比较使用Jupyter笔记本中的熊猫在1960-1962年间特定国家的谋杀率。

关于我现在的位置以及如何到达这里的一些背景:

我正在使用犯罪csv文件,该文件如下所示: enter image description here

我目前只对3栏感兴趣:州,年份和谋杀率。具体来说,我只对5个州感兴趣-阿拉斯加,密歇根州,明尼苏达州,缅因州,威斯康星州。

因此,为了生成所需的表,我这样做了(仅显示前5行条目):

al_mi_mn_me_wi = crimes[(crimes['State'] == 'Alaska') | (crimes['State'] =='Michigan') | (crimes['State'] =='Minnesota') | (crimes['State'] =='Maine') | (crimes['State'] =='Wisconsin')]
control_df = al_mi_mn_me_wi[['State', 'Year', 'Murder Rate']]

enter image description here

在这里,我使用了数据透视功能

df = control_1960_to_1962.pivot(index = 'Year', columns = 'State',values= 'Murder Rate' ) 

enter image description here

这就是我被困住的地方。我在执行操作时收到KeyError(KeyError是Year):

df.plot(x='Year', y='Murder Rate', kind='line')

以及仅尝试

df.plot()

我得到了这个古怪的图。

enter image description here

如何获取所需图形?

2 个答案:

答案 0 :(得分:2)

设置

{ "allData" : { "image" : [], "contents": {.., "box": {}, "text":[]} } }

情节

您可以明确地告诉Pandas(并通过import numpy as np import pandas as pd control_1960_to_1962 = pd.DataFrame({ 'State': np.repeat(['Alaska', 'Maine', 'Michigan', 'Minnesota', 'Wisconsin'], 3), 'Year': [1960, 1961, 1962]*5, 'Murder Rate': [10.2, 11.5, 4.5, 1.7, 1.6, 1.4, 4.5, 4.1, 3.4, 1.2, 1.0, .9, 1.3, 1.6, .9] }) df = control_1960_to_1962.pivot(index='Year', columns='State', values='Murder Rate') 软件包实际进行绘图)想要的xticks:

matplotlib

输出:

enter image description here

ax = df.plot(xticks=df.index) ylab = ax.set_ylabel('Murder Rate') matplotlib.axes.Axes object,您可以通过它对绘图进行很多很多定制。

以下是在x轴上使用ax进行绘制的方法:

States

输出:

enter image description here

答案 1 :(得分:1)

尝试这个,您可以探索更多

   pip install pivottablejs

   import pandas as pd
   import numpy as np
   from pivottablejs import pivot_ui
   df = pd.DataFrame({
      'State': np.repeat(['Alaska', 'Maine', 'Michigan', 'Minnesota','Wisconsin'], 3),
      'Year': [1960, 1961, 1962]*5,
      'Murder Rate': [10.2, 11.5, 4.5, 1.7, 1.6, 1.4, 4.5, 4.1, 3.4, 1.2, 1.0, .9, 1.3, 1.6, .9]})

pivot_ui(df)

enter image description here