【发布时间】:2021-02-25 17:18:30
【问题描述】:
我有两个数据框,它们有一个开始/结束日期时间和一个值。行数不一样。重叠的间隔可能不在同一行/索引中。
df1
start_datetime end_datetime value
08:50 09:50 5
09:52 10:10 6
10:50 11:30 2
df2
start_datetime end_datetime value
08:51 08:59 3
09:52 10:02 9
10:03 10:30 1
11:03 11:39 1
13:10 13:15 0
我想计算 df1 和 df2 仅在df1.value > df2.value 重叠时的持续时间总和。
在一个df2时间间隔内,df1可以重叠多次,有时条件为真。
我尝试过类似的方法:
time = timedelta()
for i, row1 in df1.iterrows():
t1 = pd.Interval(row1.start, row1.end)
for j, row2 in df2.iterrows():
t2 = pd.Interval(row2.start, row2.end)
if t1.overlaps(t2) and row1.value > row2.value:
latest_start = np.maximum(row1.start, row1.start)
earliest_end = np.minimum(row2.end, row2.end)
delta = earliest_end - latest_start
time += delta
我可以循环每个 df1 行并使用整个 df2 数据进行测试,但它没有经过优化。
预期输出(示例):
Timedelta('0 days 00:99:99')
【问题讨论】: