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

我有两个DataFrame。 df1是具有2列的行驶记录(drinvg开始/结束)。 df2是带有事故时间的车祸记录。我想做的是从df2获取CAR_NUMber并在df1中搜索。在df1中找到CAR_NUMber时,请检查Accd_TIME是否在START_TIME和END_TIME之间。如果否,请移至下一行。如果是,则在Accd_TIME列中输入类似输出的Accd_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
yegenting1 回答:比较两个数据帧,一个具有时间范围,另一个具有特定时间

先使用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
本文链接:https://www.f2er.com/3147878.html

大家都在问