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

标签 python 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

我想要以下结果:

新的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/

相关文章:

python - 一个应该用 Python 写出所有正确括号的程序

python - 我在这个Python代码中哪里添加re.search?

python - PySide2 - 绑定(bind)模型以查看

pandas:阻止 pandas 自动将 0.40 显示为 0.4

python - 在 Python 中选择数据框中每一行的两个子字符串之间的字符串

python - Python 质心中的 KMeans 位置不正确,我该如何将它们设为 "unscale"?

python - Pandas 中两个特定日期时间范围之间出现的数字

Python导入nltk报错

python - PostgreSQL:如何安装 plpythonu 扩展

python - 当我尝试使用 datetimeindex 在 pandas 数据框中删除一行时,它会移动索引