为df1中的每个项查找df2中最近的项

2024-10-03 00:27:08 发布

您现在位置:Python中文网/ 问答频道 /正文

如果df看起来像

    row col     value
0     7   G        96
1     3   C        43
2     7   H        44
3     7   J        97
4     8   I        90
...

q

    row col    value
0     2   C      foo
1     8   F    bravo
2     9   F  charlie
3     2   D      bar
4     2   E      qux
...

下面的代码用于此目的,但速度太慢。我如何优化它以运行得更快?当len(df) = 25000时需要约45秒。我需要解决len(df) >= 1e6的问题。你知道吗

def foo(a):
    try:
        fxlter = q.loc[(q.row == a.row) & (q.col < a.col)]
        return q.loc[fxlter.col.idxmax()].value
    except ValueError:
        return None

df['foo'] = df.nodes.apply(foo)

(其目的是通过在q中为df中的每个项目找到最接近的行标签,以通用方式将列名和行名与值匹配)

enter image description here

期望输出:

    row col  value      foo
0     7   G     96    alpha
1     3   C     43      foo
2     7   H     44    alpha
3     7   J     97    alpha
4     8   I     90    bravo
5     3   E     58      foo
6     8   H     95    bravo
7     7   I     49    alpha
8     3   D     22      foo
9     8   J     55    bravo

Tags: 目的alphadflenreturnfoovaluebar