我需要一些帮助。我陷入了一个问题。
我有以下 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
我想要以下结果:
新的DF
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 的最近的事件。
最好的方法是什么?
谢谢
最佳答案
使用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_DT
0 2020-07-29 00:15:10 A Down 2020-07-29 00:19:40
1 2020-07-29 00:25:10 B Down 2020-07-29 00:35:10
2 2020-07-29 01:14:30 A Down 2020-07-29 01:40:30
3 2020-07-29 02:15:50 A Down 2020-07-29 02:18:50
关于python - Pandas - 将两个数据帧中最近的事件与条件连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63240319/