Повторите выборку Dataframe Monthly и сохраните счет за каждый месяц в новом Dataframe со столбцами Date и Count - PullRequest
0 голосов
/ 24 мая 2018

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

Data:

Date        Title
2001-05-22    A
2001-05-28    B
2001-06-13    C
2001-06-14    D
2001-06-15    E
2001-07-15    F
2001-07-13    G
2001-07-16    H
2001-07-17    I
    .         .
    .         .
    .         .
2001-12-01    Y 
2001-12-31    Z

Итак, я хочу, чтобы вывод был таким: Новый Dataframe со столбцами

Date        Count
2001-05-31    2
2001-06-30    3
2001-07-31    4
2001-08-30    1
     .        .
     .        .

И после этого выведите данные в виде любого графика (столбец или который когда-либо выглядит хорошо для таких данных) с датой в виде оси X, Примечание: Данные за длительный период (2001-2017 гг.), Поэтому ось x не должна перекрываться.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы сказали, что ваш DataFrame имеет дату в качестве индекса, в этом случае я бы использовал resample

df.index = pd.to_datetime(df.index)
df.resample('M').count()



            Title
Date    
2001-05-31  2
2001-06-30  3
2001-07-31  4
2001-08-31  0
2001-09-30  0
2001-10-31  0
2001-11-30  0
2001-12-31  2

Для создания графика используйте pandas plot

df.resample('M').count().plot()

enter image description here

0 голосов
/ 24 мая 2018

Вы можете использовать pd.Grouper после того, как вы установили Date в формат даты и времени:

Начиная с вашего фрейма данных:

>>> df
         Date Title
0  2001-05-22     A
1  2001-05-28     B
2  2001-06-13     C
3  2001-06-14     D
4  2001-06-15     E
5  2001-07-15     F
6  2001-07-13     G
7  2001-07-16     H
8  2001-07-17     I
9  2001-12-01     Y
10 2001-12-31     Z

Установите дату и времяgroupby month:

df['Date'] = pd.to_datetime(df['Date'])

df.groupby(pd.Grouper(key='Date', freq='m')).count()

Вывод:

            Title
Date             
2001-05-31      2
2001-06-30      3
2001-07-31      4
2001-08-31      0
2001-09-30      0
2001-10-31      0
2001-11-30      0
2001-12-31      2

Для построения графика вы можете использовать это как скелет (я действительно не знаю, что вы ищете вучасток):

df['Date'] = pd.to_datetime(df['Date'])
gb = df.groupby(pd.Grouper(key='Date', freq='m')).count()

import matplotlib.pyplot as plt
plt.bar(gb.index, gb.Title)
plt.ylabel('count')
plt.xticks(rotation=90)
plt.tight_layout()

enter image description here

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