Сгруппированные даты встречаются ежеквартально в pandas фрейме данных и находят количество для их появления - PullRequest
1 голос
/ 02 апреля 2020

Мой Dataframe выглядит так:

"dataframe_time" 
   INSERTED_UTC
0    2018-05-29
1    2018-05-22
2    2018-02-10
3    2018-04-30
4    2018-03-02
5    2018-11-26
6    2018-03-07
7    2018-05-12
8    2019-02-03
9    2018-08-03
10   2018-04-27
print(type(dataframe_time['INSERTED_UTC'].iloc[1]))
<class 'datetime.date'>

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

Quarter         Count
2018-03-31        3   
2018-06-30        5   
2018-09-30        1   
2018-12-31        1   
2019-03-31        1
2019-06-30        0

Я выполняю следующую команду, чтобы сгруппировать их вместе

dataframe_time['INSERTED_UTC'].groupby(pd.Grouper(freq='Q'))

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Int64Index'

Ответы [ 2 ]

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

Вы можете конвертировать даты в кварталы по to_period('Q') и группировать по ним:

df.INSERTED_UTC = pd.to_datetime(df.INSERTED_UTC)
df.groupby(df.INSERTED_UTC.dt.to_period('Q')).size()

Вы также можете использовать value_counts:

df.INSERTED_UTC.dt.to_period('Q').value_counts()

Вывод:

INSERTED_UTC
2018Q1    3
2018Q2    5
2018Q3    1
2018Q4    1
2019Q1    1
Freq: Q-DEC, dtype: int64
1 голос
/ 02 апреля 2020

Сначала date s преобразуются в даты и затем используются DataFrame.resample с on для получения столбца с датами:

dataframe_time.INSERTED_UTC = pd.to_datetime(dataframe_time.INSERTED_UTC)
df = dataframe_time.resample('Q', on='INSERTED_UTC').size().reset_index(name='Count')

Или ваше решение возможно изменить до:

df = (dataframe_time.groupby(pd.Grouper(freq='Q', key='INSERTED_UTC'))
                    .size()
                    .reset_index(name='Count'))
print (df)
  INSERTED_UTC  Count
0   2018-03-31      3
1   2018-06-30      5
2   2018-09-30      1
3   2018-12-31      1
4   2019-03-31      1
...