给定两个 DataFrame(t1,t2),都具有列“x”,我如何将具有 t2 ID 的列附加到 t1,其中 t2 的“x”值最接近 t1 中的“x”值?
t1:
id x
1 1.49
2 2.35
t2:
id x
3 2.36
4 1.5
output:
id id2
1 4
2 3
Run Code Online (Sandbox Code Playgroud)
我可以通过创建一个新的 DataFrame 并迭代 t1.groupby() 并在 t2 上查找然后合并来完成此操作,但是对于 1700 万行的 t1 DataFrame,这需要非常长的时间。
有没有更好的方法来实现?我已经搜索了有关 groupby、apply、transform、agg 等的 pandas 文档。尽管我认为这将是一个常见问题,但一个优雅的解决方案尚未出现。
df = pd.merge_asof(df1.sort_values('x'),
df2.sort_values('x'),
on='x',
direction='nearest',
suffixes=['', '_2'])
print(df)
Out[975]:
id x id_2
0 3 0.87 6
1 1 1.49 5
2 2 2.35 4
Run Code Online (Sandbox Code Playgroud)
方法二reindex
df1['id2']=df2.set_index('x').reindex(df1.x,method='nearest').values
df1
id x id2
0 1 1.49 4
1 2 2.35 3
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5530 次 |
最近记录: |