Python 如何使用最新时间合并熊猫中的两个数据帧

Python 如何使用最新时间合并熊猫中的两个数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,位置= id time x y z T1 1000 100 100 120 T1 2000 50 50 120 T2 1200 100 200 120 事件= id time event T1 1500 stopped T2 1200 travelling 期望结果= id time event x y z T1 1500

位置=

  id  time    x    y    z
  T1  1000  100  100  120
  T1  2000   50   50  120
  T2  1200  100  200  120  
事件=

  id   time       event
  T1   1500     stopped    
  T2   1200  travelling
期望结果=

  id   time       event    x    y    z  
  T1   1500     stopped  100  100  120    
  T2   1200  travelling  100  200  120
如果时间相同,我可以在id列和时间列上进行合并,是否有一个优雅的解决方案来获取最近的时间?

您可以尝试使用此方法解决此问题
为此,您的两个df都需要按时间排序。

代码示例:

import pandas as pd
from io import StringIO

position_text = """
  id  time    x    y    z
  T1  1000  100  100  120
  T1  2000   50   50  120
  T2  1200  100  200  120
"""

event_text = """
  id   time       event
  T1   1500     stopped    
  T2   1200  travelling
"""

df_position = pd.read_csv(
    StringIO(position_text), 
    sep='\s+', header=0,
).sort_values(by=['time', 'id'])

df_event = pd.read_csv(
    StringIO(event_text), 
    sep='\s+', header=0
).sort_values(by=['time', 'id'])

df_result = pd.merge_asof(
    df_event, df_position, 
    on='time', by='id', 
    direction='backward',
)

df_result.sort_values(by='id')
这导致:

id  time    event       x   y   z
T1  1500    stopped     100 100 120
T2  1200    travelling  100 200 120

你能解释一下为什么
time=1500的[x,y,z]值是
[100100120]
?时间=1000比1200更接近1500吗?@serialazer因为id=T1,有多台机器正在生成事件和位置为什么选择T1 1500而不是T1 2000?@Sandervandeoord因为1000是最近发生的事件。与在SQL中执行类似操作相比,该方法工作非常完美,性能非常好,非常感谢这种合并方法