Разделение результатов по группам по участкам - PullRequest
1 голос
/ 02 апреля 2020

У меня есть фрейм данных, stock_data.head():

       date     open    high    low     close    volume    Name
0   2013-02-08  15.07   15.12   14.63   14.75   8407500     AAL
1   2013-02-11  14.89   15.01   14.26   14.46   8882000     AAL
2   2013-02-12  14.45   14.51   14.10   14.27   8126000     AAL
3   2013-02-13  14.30   14.94   14.25   14.66   10259500    AAL
4   2013-02-14  14.94   14.96   13.16   13.99   31879900    AAL

Ниже у меня есть код для создания команды groupby из моего фрейма данных:

avg_permonth = stock_data.set_index('date').groupby(pd.Grouper(freq='M'))
avg_permonth['volume'].mean()


date
2013-02-28    5.261789e+06
2013-03-31    4.825485e+06
2013-04-30    4.990292e+06
2013-05-31    4.836257e+06
2013-06-30    5.145598e+06
                  ...     
2017-10-31    3.903486e+06
2017-11-30    4.133801e+06
2017-12-31    3.919748e+06
2018-01-31    4.486669e+06
2018-02-28    6.249305e+06
Freq: M, Name: volume, Length: 61, dtype: float64

Мой вопрос: Как я могу разделить эти результаты по годам, чтобы затем создать подзаговоры date vs volume? (Должен ли я сначала reset_index() или я могу построить index как x axis?) I w sh для 5 subplots с 2013-02 до 2018-02.

I пробовал с этим этим SO сообщением , но не дал результата, который я искал - это было 5 участков, но x axis было с 2013 по 2018 год для каждого участка, и у всех был один и тот же участок.

I * sh для x axis на первом субплоте от первого значения даты 2013 до последнего значения даты 2013, второго графика 2014 года и т. Д.

1 Ответ

1 голос
/ 02 апреля 2020

вы можете сделать это так:

import matplotlib.pyplot as plt

# dummy values like your serie
s = pd.Series(range(12*6), 
              index=pd.date_range('2013-01-01', '2018-12-31', freq='M'), 
              name='volume')

# Create figure and axs for multiple Axes
fig, axs = plt.subplots(3, 2, figsize=(12,12))

# groupby year to plot each year un a subplot
for i, (year, sg) in enumerate(s.groupby(s.index.year)):
    # plot each year in a subplot
    sg.plot(ax=axs[i//2, i%2]) # here you can add several parameters for colors and stuff
    # or axs[i//2, i%2].plot(sg.index, sg.values) would give the same result
plt.show() 
...