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中执行类似操作相比,该方法工作非常完美,性能非常好,非常感谢这种合并方法