您需要DatetimeIndex.floor:
myIndex = df.index.floor('D')
样品:
rng = pd.date_range('2017-04-03 15:00:45', periods=10, freq='24T')
df = pd.DataFrame({'a': range(10)}, index=rng)
print (df)
a
2017-04-03 15:00:45 0
2017-04-03 15:24:45 1
2017-04-03 15:48:45 2
2017-04-03 16:12:45 3
2017-04-03 16:36:45 4
2017-04-03 17:00:45 5
2017-04-03 17:24:45 6
2017-04-03 17:48:45 7
2017-04-03 18:12:45 8
2017-04-03 18:36:45 9
myIndex = df.index.floor('D')
print (myIndex)
DatetimeIndex(['2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03'],
dtype='datetime64[ns]', freq=None)
myIndex = df.index.normalize()
print (myIndex)
DatetimeIndex(['2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03', '2017-04-03', '2017-04-03',
'2017-04-03', '2017-04-03'],
dtype='datetime64[ns]', freq=None)
时序:
ix = pd.date_range('1970-01-01', '2200-01-15', freq='1H')
print (len(ix))
2016481
In [68]: %timeit (ix.normalize())
10 loops, best of 3: 178 ms per loop
In [69]: %timeit (ix.floor('d'))
10 loops, best of 3: 38.4 ms per loop
#solution from Dror (https://stackoverflow.com/questions/45954497/in-pandas-group-by-date-from-datetimeindex)
In [70]: %timeit pd.to_datetime(ix.date)
1 loop, best of 3: 5.09 s per loop