2017-02-01 1 views
1

Вопрос о новичке, спасибо заранее!График линии Pandas по месяцам, в разбивке по отраслям с учетом времени SQL Экспорт

Я пытаюсь объединить данные как по дате, так и по отрасли и отобразить график, который показывает различные показатели доходов отрасли по временным рядам ежемесячно.

Я работаю от экспорта SQL, который имеет временные метки, имея медведя времени, чтобы это работало.

Опубликовано пример файла CSV данные здесь: https://drive.google.com/open?id=0B4xdnV0LFZI1WGRMN3AyU2JERVU

Вот небольшой пример данных:

Industry  Date    Revenue 
Fast Food 01-05-2016 12:18:02 100 
Fine Dining 01-08-2016 09:17:48 110 
Carnivals 01-18-2016 10:48:52 200 

Моя неудачная попытка здесь:

import pandas as pd 
import datetime 
import matplotlib.pyplot as plt 

df = pd.read_csv('2012_to_12_27_2016.csv') 

df['Ship_Date'] = pd.to_datetime(df['Ship_Date'], errors = 'coerce') 
df['Year'] = df.Ship_Date.dt.year 
df['Ship_Date'] = pd.DatetimeIndex(df.Ship_Date).normalize() 
df.index = df['Ship_Date'] 
df_skinny = df[['Shipment_Piece_Revenue', 'Industry']] 

groups = df_skinny[['Shipment_Piece_Revenue', 'Industry']].groupby('Industry') 
groups = groups.resample('M').sum() 
groups.index = df['Ship_Date'] 

fig, ax = plt.subplots() 
groups.plot(ax=ax, legend=False) 
names = [item[0] for item in groups] 
ax.legend(ax.lines, names, loc='best') 

plt.show() 

ответ

2

Вы можете использовать DataFrame.Series.unique, чтобы получить список всех отраслей промышленности, а затем, используя DataFrame.loc, определите новый объект DataFrame, который содержит только данные из одной отрасли.

Тогда, если мы устанавливаем Ship Date столбца как индекс нового DataFrame, мы можем использовать DataFrame.resample, указать частоту, как месяцы и вызвать sum(), чтобы получить общий доход за этот месяц.

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv('Graph_Sample_Data.csv') 
df['Ship Date'] = pd.to_datetime(df['Ship Date'], errors='coerce') 

fig, ax = plt.subplots() 

for industry in df.Industry.unique(): 
    industry_df = df.loc[df.Industry == industry] 
    industry_df.index = industry_df['Ship Date'] 
    industry_df = industry_df.resample('M').sum() 
    industry_df.plot(x=industry_df.index, 
        y='Revenue', 
        ax=ax, 
        label=industry) 

plt.show() 
+0

Это очень близко - я хочу, чтобы даты были сгруппированы в месячные итоговые значения для каждой отрасли и создавали график таким образом. Вы знаете, как я могу это сделать? Благодаря! D – SDS

+0

Я отредактировал свое решение для расчета ежемесячных итогов, надеюсь, что это полезно! –

Смежные вопросы