time
в пандах - это объект python, поэтому не работает с Grouper
. Возможное решение - выбрать время с разбивкой и преобразовать в timedeltas на to_timedelta
или преобразовать в to_datetime
- получить одинаковые даты, потому что datetime
всегда содержит date
:
df = (
pd.DataFrame({'date': ['2018-01-01 12:10:00', '2018-01-02 12:11:00']})
.assign(date=lambda df: pd.to_timedelta(df.date.str.split().str[1]))
.groupby(pd.Grouper(key='date', freq='10T'))
.size()
)
print (df)
date
12:10:00 2
Freq: 10T, dtype: int64
Или:
df = (
pd.DataFrame({'date': ['2018-01-01 12:10:00', '2018-01-02 12:11:00']})
.assign(date=lambda df: pd.to_datetime(df.date.str.split().str[1]))
.groupby(pd.Grouper(key='date', freq='10T'))
.size()
)
print (df)
date
2019-01-15 12:10:00 2
Freq: 10T, dtype: int64
Если входной столбец имеет datetime
dtype, используйте strftime
для преобразования в строки:
df = (
pd.DataFrame({'date': pd.to_datetime(['2018-01-01 12:10:00', '2018-01-02 12:11:00'])})
.assign(date=lambda df: pd.to_datetime(df.date.dt.strftime('%H:%M:%S')))
.groupby(pd.Grouper(key='date', freq='10T'))
.size()
)
print (df)
date
2019-01-15 12:10:00 2
Freq: 10T, dtype: int64
Или:
df = (
pd.DataFrame({'date': pd.to_datetime(['2018-01-01 12:10:00', '2018-01-02 12:11:00'])})
.assign(date=lambda df: pd.to_datetime(df.date.dt.time.astype(str)))
.groupby(pd.Grouper(key='date', freq='10T'))
.size()
)
print (df)
date
2019-01-15 12:10:00 2
Freq: 10T, dtype: int64