按时间间隔在熊猫中对数据进行分组

时间:2020-07-08 13:17:09

标签: python python-3.x pandas

我有以下数据框:

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做到这一点。任何建议都是值得的。

2 个答案:

答案 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