上下文:我有 2 个不同系列的数据保存在 2 个数据框中:
index object time
0 45 12.56416
1 30 10.61656
2 5 10.74478
3 8 56.14421
4 1 13.23214
5 45 58.56315
index object time
0 45 12.56491
1 30 10.61656
2 15 189.74478
3 8 56.14421
4 45 98.23214
5 45 58.56410
6 5 10.74992
对于每个数据帧,我可以多次使用不同时间的对象。目标是比较它们之间的两个数据帧并显示如下结果:
object time_dataframe1 time_dataframe2 difference
45 12.56416 12.56491 |time_dataframe1-time_dataframe2|
45 58.56315 58.56410 0.00095
30 10.61656 10.61656 0.
8 56.14421 56.14421 0.
5 10.74412 10.74992 0.0058
这里的特殊性是比较 2 个数据帧之间的“相同”对象/时间,但时间关闭(这里我们应该确定精度 <0.01) and remove all the others.
我可以合并这两个数据框,但我不想比较数据框 1 本身的行。我该怎么做才能解决这个问题?
谢谢。
merge_asof
:
(pd.merge_asof(df1.sort_values(by='time')
.rename(columns={'time': 'time_dataframe1'}),
df2.drop(columns='index').sort_values(by='time')
.rename(columns={'time': 'time_dataframe2'}),
by='object',
left_on='time_dataframe1', right_on='time_dataframe2',
direction='nearest', tolerance=0.01
)
.dropna(subset=['time_dataframe2'])
.assign(diff=lambda d: d['time_dataframe1'].sub(d['time_dataframe2']).abs())
.sort_values(by='object', ascending=False)
)
输出:
index object time_dataframe1 time_dataframe2 diff
2 0 45 12.56416 12.56491 0.00075
5 5 45 58.56315 58.56410 0.00095
0 1 30 10.61656 10.61656 0.00000
4 3 8 56.14421 56.14421 0.00000
1 2 5 10.74478 10.74992 0.00514