比较两个数据帧,一个有时间范围,另一个有特定的tim

2024-05-21 04:46:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧。df1是具有2列的驱动记录(drinvg start/end)。 df2是带有事故时间的车祸记录。我想做的是从df2获得汽车号码并在df1中搜索。当在df1中找到车号时,检查ACCD时间是否在开始时间和结束时间之间。如果没有,请移到下一行。如果是,则制作ACCD\u TIME列,并像输出一样写下ACCD\u TIME。请帮忙

df1型

START_TIME          END_TIME      CAR_NUMBER
2019-01-01 8:01   2019-01-01 9:00   A12345
2019-01-02 11:30  2019-01-02 13:00  A12345
2019-01-03 9:30   2019-01-03 10:00  A12345
2019-01-01 9:30   2019-01-01 10:30  B23456
2019-01-02 9:00   2019-01-02 9:17   B23456
2019-01-04 13:00  2019-01-04 14:50  B23456
2019-02-01 16:00  2019-02-01 17:00  C34567
2019-02-05 8:14   2019-02-05 8:30   C34567
2019-02-06 11:00  2019-02-06 11:20  C34567

df2型

ACCD_TIME         CAR_NUMBER
2019-01-02 12:00    A12345
2019-02-06 11:10    C34567

输出

START_TIME          END_TIME      CAR_NUMBER   ACCD_TIME
2019-01-01 8:01   2019-01-01 9:00   A12345        NULL
2019-01-02 11:30  2019-01-02 13:00  A12345    2019-01-02 12:00
2019-01-03 9:30   2019-01-03 10:00  A12345        NULL
2019-01-01 9:30   2019-01-01 10:30  B23456        NULL
2019-01-02 9:00   2019-01-02 9:17   B23456        NULL
2019-01-04 13:00  2019-01-04 14:50  B23456        NULL
2019-02-01 16:00  2019-02-01 17:00  C34567        NULL
2019-02-05 8:14   2019-02-05 8:30   C34567        NULL
2019-02-06 11:00  2019-02-06 11:20  C34567    2019-02-06 11:10

Tags: 数据numbertime记录时间carstartnull
1条回答
网友
1楼 · 发布于 2024-05-21 04:46:01

使用pandas.DataFrame.merge然后pandas.Series.betweenwhere

new_df = df.merge(df2, how='outer', left_on="CAR_NUMBER", right_on="CAR_NUMBER")
new_df['ACCD_TIME'] = new_df['ACCD_TIME'].where(new_df['ACCD_TIME'].between(new_df['START_TIME'], new_df['END_TIME']))

输出:

           START_TIME            END_TIME CAR_NUMBER           ACCD_TIME
0 2019-01-01 08:01:00 2019-01-01 09:00:00     A12345                 NaT
1 2019-01-02 11:30:00 2019-01-02 13:00:00     A12345 2019-01-02 12:00:00
2 2019-01-03 09:30:00 2019-01-03 10:00:00     A12345                 NaT
3 2019-01-01 09:30:00 2019-01-01 10:30:00     B23456                 NaT
4 2019-01-02 09:00:00 2019-01-02 09:17:00     B23456                 NaT
5 2019-01-04 13:00:00 2019-01-04 14:50:00     B23456                 NaT
6 2019-02-01 16:00:00 2019-02-01 17:00:00     C34567                 NaT
7 2019-02-05 08:14:00 2019-02-05 08:30:00     C34567                 NaT
8 2019-02-06 11:00:00 2019-02-06 11:20:00     C34567 2019-02-06 11:10:00

相关问题 更多 >