Как оформить сюжет на каждый месяц? - PullRequest
0 голосов
/ 09 октября 2018

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

Кадр данных до

    month   day  
0    1      1   
1    1      1    
2    1      1      
..
3000 12      31   
3001 12      31   
3002 12      31     

Dataframe сейчас:

   month   day  count
0    1      1    300
1    1      2    500
2    1      3    350  
..
363  12      28   700
364  12      29   1300
365  12      30   1000  

Как составить подзаговор для каждого месяца, x будет днями, а y будет счетчиком

    import pandas as pd
    import matplotlib.pyplot as plt
    %matplotlib inline
    df= pd.read_csv('/home/rand/Downloads/Flights.csv')
    by_month= df.groupby(['month','day']).day.agg('count').to_frame('count').reset_index()

Я новичок вобласть данных науки

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Попробуйте это

fig, ax = plt.subplots()
ax.set_xticks(df['day'].unique())
df.groupby(["day", "month"]).mean()['count'].unstack().plot(ax=ax)

Приведенный выше код даст вам 12 строк, представляющих каждый месяц на одном графике.Если вы хотите иметь 12 отдельных сюжетов для этих месяцев, попробуйте это:

fig = plt.figure()
for i in range(1,13):
    df_monthly = df[df['month'] == i] # select dataframe with month = i
    ax = fig.add_subplot(12,1,i) # add subplot in the i-th position on a grid 12x1   
    ax.plot(df_monthly['day'], df_monthly['count'])
    ax.set_xticks(df_monthly['day'].unique()) # set x axis 
0 голосов
/ 09 октября 2018

Попробуйте:

df = pd.DataFrame({
    'month': list(range(1, 13))*3, 
    'days': np.random.randint(1,11, 12*3), 
    'count': np.random.randint(10,20, 12*3)})

df.set_index(['month', 'days'], inplace=True)
df.sort_index()

df = df.groupby(level=[0, 1]).sum()

enter image description here

Код для ее построения:

df.reset_index(inplace=True)
df.pivot(index='days', columns='month', values='count').fillna(0).plot()
0 голосов
/ 09 октября 2018

Я думаю, вы могли бы использовать pandas.DataFrame.pivot, чтобы изменить форму своего стола, чтобы сделать его более удобным для графика.Таким образом, в вашем коде вы могли бы сделать что-то вроде этого:

 plot_data= df.pivot(index='day', columns='month', values='count')
 plot_data.plot()
 plt.show()

Это предполагает, что у вас есть равное количество дней в каждом месяце, так как в примере, который вы включили, месяц 12 имеет только 30 дней.Подробнее о pivot .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...