Pandas - 将来自两个数据帧的最近事件与条件连接起来

我需要一些帮助。我陷入了一个问题。


我有以下DF


DF1


DATETIME           ID       State


2020-07-29 00:15:10   A     Down

2020-07-29 00:25:10   B     Down

2020-07-29 01:14:30   A     Down

2020-07-29 02:15:50   A     Down

DF2


DATETIME            ID      State


2020-07-29 00:19:40   A     Up

2020-07-29 00:35:10   B     Up

2020-07-29 00:56:40   B     Up

2020-07-29 01:40:30   A     Up

2020-07-29 01:35:10   B     Up

2020-07-29 02:18:50   A     Up

2020-07-29 02:45:50   A     Up

我想要以下结果:


新东风


DATETIME             ID     State   Restore_DT

2020-07-29 00:15:10    A    Down    2020-07-29 00:19:40

2020-07-29 00:25:10    B    Down    2020-07-29 00:35:10

2020-07-29 01:14:30    A    Down    2020-07-29 01:40:30

2020-07-29 02:15:50    A    Down    2020-07-29 02:18:50

理论上,我需要从 DF1 中找到 DF2 中具有相同 ID 的最近事件。


最好的方法是什么?


眼眸繁星
浏览 70回答 2
2回答

吃鸡游戏

merge_asof与参数一起使用direction='nearest',也首先对列进行排序并通过以下方式创建新列DataFrame.assign:df1['DATETIME'] = pd.to_datetime(df1['DATETIME'])df2['DATETIME'] = pd.to_datetime(df2['DATETIME'])df1 = df1.sort_values('DATETIME')df2 = df2.sort_values('DATETIME')df = pd.merge_asof(df1,                    df2[['DATETIME','ID']].assign(Restore_DT = df2['DATETIME']),                    on='DATETIME',                    by='ID',                    direction='nearest')print (df)             DATETIME ID State          Restore_DT0 2020-07-29 00:15:10  A  Down 2020-07-29 00:19:401 2020-07-29 00:25:10  B  Down 2020-07-29 00:35:102 2020-07-29 01:14:30  A  Down 2020-07-29 01:40:303 2020-07-29 02:15:50  A  Down 2020-07-29 02:18:50

茅侃侃

您可以使用merge.首先合并 df(这会将 datetime 与最近的 datetime1 合并)df_cross_merge&nbsp;=&nbsp;df1.merge(df2,&nbsp;on='ID',&nbsp;how='left').query('DATETIME&nbsp;<=&nbsp;DATETIME1')并获得您想要的 df(仅保留第一个日期时间)df_cross_merge&nbsp;=df_cross_merge.drop_duplicates(['DATETIME'],keep='first')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python