我有以下数据框:
0 930 260.915508 2020-07-06 15:35:00
1 950 246.900944 2020-07-06 15:35:00
2 930 258.750335 2020-07-06 15:40:00
3 950 254.532348 2020-07-06 16:40:00
4 970 216.844755 2020-07-06 16:40:00
我有一个开始日期:2020-07-06 12:00
。从开始日期开始,我需要以四个小时的时间间隔对我的Pandas Dataframe进行分组,因此:2020-07-06 12:00
> 2020-07-06 16:00
> 2020-07-06 20:00
,依此类推。
因此,我的数据框的预期输出变为:
0 930 260.915508 2020-07-06 16:00:00
1 950 246.900944 2020-07-06 16:00:00
2 930 258.750335 2020-07-06 16:00:00
3 950 254.532348 2020-07-06 20:00:00
4 970 216.844755 2020-07-06 20:00:00
说明:如果数据帧中的行具有datetime
15:35
,则新时间需要为16:00
。如果时间为16:01
,则新时间将变为20:00
。
我不知道这是否仅对Pandas可行,恐怕我需要使用更多的代码来做到这一点,但是我首先想看看这里是否有人能够仅对Pandas做到这一点。任何建议都是值得的。
答案 0 :(得分:1)
您可以使用dt.ceil
:
df['time_col'] = df['time_col'].dt.ceil('4H')
输出:
0 0 930 260.915508 2020-07-06 16:00:00
1 1 950 246.900944 2020-07-06 16:00:00
2 2 930 258.750335 2020-07-06 16:00:00
3 3 950 254.532348 2020-07-06 20:00:00
4 4 970 216.844755 2020-07-06 20:00:00
答案 1 :(得分:1)
以4H
的间隔使用Series.dt.ceil
:
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].dt.ceil('4H')
print (df)
col1 col2 date
0 930 260.915508 2020-07-06 16:00:00
1 950 246.900944 2020-07-06 16:00:00
2 930 258.750335 2020-07-06 16:00:00
3 950 254.532348 2020-07-06 20:00:00
4 970 216.844755 2020-07-06 20:00:00
编辑:对于第一个日期时间的加时,可以用4
取模取小时并添加timedelta,如果第一个日期时间是2020-07-06 12:00
,因为12 % 4 = 0
被添加了0 hours
如果第一个日期时间是2020-07-06 13:00
,因为添加了12 % 4 = 1
1 hour
:
df['date'] = pd.to_datetime(df['date'])
first = pd.Timedelta(df['date'].iat[0].hour % 4, unit='h')
print (first)
df['date'] = df['date'].dt.ceil('4H') + first