在15分钟内按汇总行从pandas数据帧到数据帧时间序列

时间:2019-02-06 12:12:57

标签: python pandas

例如,我有一个这样的数据框:

    ID  Arrival_time
 ....
0   22  2019-01-01 05:34:10
1   23  2018-01-01 05:36:18
2   24  2018-01-01 05:44:24
3   25  2018-01-01 06:10:26
4   26  2018-01-01 06:08:28
5   27  2018-01-01 06:22:29 
 .... 

我需要一个新的数据帧,该数据帧的时间序列为15分钟的bins作为索引,并且该列中的ARRIVAL_TIME条目在这15分钟之内。

对于上述情况,我期望类似:

                   COUNTED_ARRIVALS
....
2019-01-01 05:30     3
2019-01-01 05:45     0
2019-01-01 06:00     2
2019-01-01 06:15     1
2019-01-01 06:30     0
2019-01-01 06:45     0
2019-01-01 07:00     0
....

如何在熊猫中实现呢?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用pd.cut来获取时间范围内的值框

df

    1   time
0   21  2018-01-01 05:34:10
1   23  2018-01-01 05:36:18
2   24  2018-01-01 05:44:24
3   25  2018-01-01 06:10:26
4   26  2018-01-01 06:08:28
5   27  2018-01-01 06:22:29


bins = pd.date_range(start=df['time'].min().floor('15Min'),end=df['time'].max().floor('15Min'),freq='15Min')
df.groupby(pd.cut(df['time'],bins)).count()

出局:

                                           1    time
time        
(2018-01-01 05:30:00, 2018-01-01 05:45:00]  3   3
(2018-01-01 05:45:00, 2018-01-01 06:00:00]  0   0
(2018-01-01 06:00:00, 2018-01-01 06:15:00]  2   2

答案 1 :(得分:0)

首先使用dt.floor获得15 minutes的往返时间,然后将groupby.countresample一起使用:

df = (df.groupby(df['Arrival_time'].dt.floor('15T'))['Arrival_time'].count()
        .resample('15T')
        .mean()
        .fillna(0, downcast='infer')
        .reset_index(name='Counted_Arrival'))

print(df)
         Arrival_time  Counted_Arrival
0 2019-01-01 05:30:00                3
1 2019-01-01 05:45:00                0
2 2019-01-01 06:00:00                2
3 2019-01-01 06:15:00                1

转换前的原始数据框:

print(df)
   ID        Arrival_time
0  22 2019-01-01 05:34:10
1  23 2019-01-01 05:36:18
2  24 2019-01-01 05:44:24
3  25 2019-01-01 06:10:26
4  26 2019-01-01 06:08:28
5  27 2019-01-01 06:22:29