Построение Pandas DataFrame из сводной таблицы - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь построить линейный график, сравнивающий показатели убийств отдельных штатов в 1960-1962 гг., Используя Панд в записной книжке Jupyter.

Небольшой контекст о том, где я сейчас нахожусь и как я сюда попал:

Я использую CSV-файл Crime, который выглядит так: enter image description here

В данный момент меня интересуют только три столбца: Штат, Год и Уровень убийства.В частности, меня интересовали только 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

Здесь я использовал функцию pivot

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

enter image description here

И вот где я застреваю.Я получил KeyError при выполнении (KeyError было Год):

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

и при попытке просто

df.plot()

я получаю этот график вонючий.

enter image description here

Как получить желаемый график?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

попробуйте это, вы можете исследовать больше

   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

0 голосов
/ 17 декабря 2018

Настройка

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

Графики

Вы можете указать Pandas (и через него пакет matplotlib, который фактически выполняет построение графиков), какие метки вы хотите явно:

ax = df.plot(xticks=df.index)
ylab = ax.set_ylabel('Murder Rate')

Вывод:

enter image description here

ax является matplotlib.axes.Axes объектом , и их много, многонастройки, которые вы можете сделать для своего графика через него.

Вот как построить график с помощью States на оси x:

ax = df.T.plot(kind='bar')
ylab = ax.set_ylabel('Murder Rate')

Вывод:

enter image description here

...