我有一个数据框:
ID time_begin time_end
A1 2019-04-04 08:04:56 2019-04-04 08:15:26
A11 2019-04-04 08:14:22 2019-04-04 08:42:04
BB 2019-04-04 08:44:53 2019-04-04 09:02:11
C5 2019-04-04 09:01:12 2019-04-04 09:22:07
C1 2019-04-04 09:03:51 2019-04-04 09:34:20
DD 2019-04-04 09:22:42 2019-04-04 09:42:42
DD1 2019-04-04 09:25:42 2019-04-04 09:47:55
因此,我想在 20 分钟的“时间”样本中获得跨越时间戳半小时值的最大 ID 数。time ID_num
2019-04-04 08:00:00 1
2019-04-04 08:20:00 0
2019-04-04 08:40:00 1
2019-04-04 09:00:00 2
2019-04-04 09:20:00 2
我怎么能那样做?我棘手的部分是,仅当 ID 跨越值 8:00、8:20、8:40 时才计算 ID,......
最佳答案
这看起来可以通过交叉合并和查询来完成:
# set up the time intervals
intervals = pd.date_range(df.time_begin.min().floor('20min'),
df.time_end.max().ceil('20min'), freq='20min')
ref = pd.DataFrame({'dummy':1,'start':intervals[:-1], 'end':intervals[1:]})
(df.assign(dummy=1)
.merge(ref, on='dummy')
.query('start < time_begin < end <= time_end') # your logic is here
.groupby('start')
.size()
.reindex(intervals[:-1], fill_value=0)
)
输出:2019-04-04 08:00:00 1
2019-04-04 08:20:00 0
2019-04-04 08:40:00 1
2019-04-04 09:00:00 2
2019-04-04 09:20:00 2
2019-04-04 09:40:00 0
Freq: 20T, dtype: int64
关于python - 计算数据帧中属于给定日期时间间隔的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64227062/