在 pandas 数据框中按季度分组并查找它们出现的次数

Groupby dates quaterly in a pandas dataframe and find count for their occurence

我的数据框看起来像

"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'

首先将 dates 转换为日期时间,然后将 DataFrame.resampleon 一起用于获取带有日期时间的列:

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

您可以按 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