Python 无法在datetime.time对象上按pd.Grouper分组

Python 无法在datetime.time对象上按pd.Grouper分组,python,pandas,datetime,Python,Pandas,Datetime,我不明白如何只考虑数据帧中的时间来分组 MWE: 工作正常,但考虑到了一天。熊猫中的时间是python对象,因此不能使用Grouper。可能的解决方案是通过拆分选择时间,并通过转换为时间增量或转换为-获取相同的日期,因为datetime始终包含date: df = ( pd.DataFrame({'date': ['2018-01-01 12:10:00', '2018-01-02 12:11:00']}) .assign(date=lambda df: pd.to_timede

我不明白如何只考虑数据帧中的时间来分组

MWE:


工作正常,但考虑到了一天。

熊猫中的时间是python对象,因此不能使用
Grouper
。可能的解决方案是通过拆分选择时间,并通过转换为时间增量或转换为-获取相同的日期,因为
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
或:

如果输入列具有
datetime
dtype,则用于转换为字符串:

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
或:


谢谢,我会使用
pd.to_timedelta(df.date.astype('datetime64').dt.time.astype(str))
,因为它不会添加假日期。不管怎样,我很惊讶在这两种基本要求之间必须使用
str
输入。我们有一些详细的例子+1.
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
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