例如,我有一个这样的数据框:
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
....
如何在熊猫中实现呢?
答案 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.count
与resample
一起使用:
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