Учитывая
>>> df
created_at entities
0 2017-10-29 23:06:28 1
1 2017-10-29 22:28:20 2
2 2017-10-29 20:01:37 3
3 2017-10-29 20:00:14 4
4 2017-10-27 08:44:30 5
5 2017-10-27 08:44:10 6
6 2017-10-27 08:43:13 7
7 2017-10-27 08:43:00 8
с
>>> df.dtypes
created_at datetime64[ns]
entities int64
dtype: object
, вы можете выдавать:
>>> pd.PeriodIndex(df['created_at'], freq='D').value_counts()
2017-10-29 4
2017-10-27 4
Freq: D, Name: created_at, dtype: int64
Более хороший подход без конструктора PeriodIndex
был предложен jezraelв комментариях:
>>> df['created_at'].dt.to_period('D').value_counts()
2017-10-27 4
2017-10-29 4
С некоторым дополнительным переименованием, чтобы соответствовать вашему выводу, это начинает выглядеть подозрительно как решение Jezrael.;)
>>> datecol = 'created_at'
>>> df[datecol].dt.to_period('D').value_counts().rename_axis(datecol).reset_index(name='number_of_entities')
created_at number_of_entities
0 2017-10-27 4
1 2017-10-29 4
В качестве альтернативы вы можете установить индекс для дат, а затем resample
:
>>> df.set_index('created_at').resample('D').size()
created_at
2017-10-27 4
2017-10-28 0
2017-10-29 4
Freq: D, dtype: int64
... и если необходимо преобразование в точный вывод:
>>> resampled = df.set_index('created_at').resample('D').size()
>>> resampled[resampled != 0].reset_index().rename(columns={0: 'number_of_entities'})
created_at number_of_entities
0 2017-10-27 4
1 2017-10-29 4
Еще немного контекста: resample
особенно полезен для произвольных временных интервалов, например, «пять минут».Следующий пример взят непосредственно из книги Уэса МакКинни «Питон для анализа данных».
>>> N = 15
>>> times = pd.date_range('2017-05-20 00:00', freq='1min', periods=N)
>>> df = pd.DataFrame({'time': times, 'value': np.arange(N)})
>>>
>>> df
time value
0 2017-05-20 00:00:00 0
1 2017-05-20 00:01:00 1
2 2017-05-20 00:02:00 2
3 2017-05-20 00:03:00 3
4 2017-05-20 00:04:00 4
5 2017-05-20 00:05:00 5
6 2017-05-20 00:06:00 6
7 2017-05-20 00:07:00 7
8 2017-05-20 00:08:00 8
9 2017-05-20 00:09:00 9
10 2017-05-20 00:10:00 10
11 2017-05-20 00:11:00 11
12 2017-05-20 00:12:00 12
13 2017-05-20 00:13:00 13
14 2017-05-20 00:14:00 14
>>>
>>> df.set_index('time').resample('5min').size()
time
2017-05-20 00:00:00 5
2017-05-20 00:05:00 5
2017-05-20 00:10:00 5
Freq: 5T, dtype: int64