我有以下数据帧:
DF1:
key | col1 | col2
1 13 a
1 15 b
1 18 c
... ... ...
DF2:
key | col1
1 14
1 15
1 19
...
我想用DF1
中的col2
填充DF2
,使用键:["key", "col1"]
。如果DF1.col1
和DF2.col1
不匹配,我想找到DF1.col1
中最后出现的比DF2.col1
小的。
所以期望的输出是:
DF2:
key | col1 | col2
1 14 a # Not exact match, so it will take DF1.col1 = 13
1 15 b
1 19 c # Not exact match, so it will take DF1.col1 = 18
... ... ...
使用传统的与pandas合并,如果没有匹配,则返回None:
result = pd.merge(DF1, DF2, how="right", on=["key", "col1"])
结果:
key | col1 | col2
1 14 None
1 15 b
1 19 None
... ... ...
您可以使用pd.merge_asof
:
print (pd.merge_asof(df2, df1, on="col1", by="key"))
key col1 col2
0 1 14 a
1 1 15 b
2 1 19 c
注意这需要对两个dfs上的col1
进行排序。