Pandas 查找大于当前值的最小值

Pandas 查找大于当前值的最小值,pandas,Pandas,我有一个对象表和一个查找表。在对象表中,我希望从查找表中添加大于对象的编号的最小值 我发现了这一点,但它是关于找到一个大于常数的值,而不是针对每一行进行更改 代码: import pandas as pd objects = pd.DataFrame([{"id": 1, "number": 10}, {"id": 2, "number": 30}]) lookup = pd.DataFrame([{"number": 3}, {"number": 12}, {"number": 40}])

我有一个
对象
表和一个
查找
表。在
对象
表中,我希望从
查找
表中添加大于对象的
编号
的最小值

我发现了这一点,但它是关于找到一个大于常数的值,而不是针对每一行进行更改

代码:

import pandas as pd

objects = pd.DataFrame([{"id": 1, "number": 10}, {"id": 2, "number": 30}])

lookup = pd.DataFrame([{"number": 3}, {"number": 12}, {"number": 40}])

expected = pd.DataFrame(
    [
        {"id": 1, "number": 10, "smallest_greater": 12},
        {"id": 2, "number": 30, "smallest_greater": 40},
    ]
)

首先通过
对象['number']
将每个值
查找['number']
与2d布尔掩码进行比较,然后添加
cumsum
并通过
1
比较第一个值,通过
查找['number']
获取设置值的位置

生成输出时,会将所有不匹配的值覆盖到
NaN

objects = pd.DataFrame([{"id": 1, "number": 10}, {"id": 2, "number": 30},
                        {"id": 3, "number": 100},{"id": 4, "number": 1}])

print (objects)
   id  number
0   1      10
1   2      30
2   3     100
3   4       1

m1 = lookup['number'].values >= objects['number'].values[:, None]
m2 = np.cumsum(m1, axis=1) == 1
m3 = np.any(m1, axis=1)
out = lookup['number'].values[m2.argmax(axis=1)]

objects['smallest_greater'] = np.where(m3, out, np.nan)
print (objects)
   id  number  smallest_greater
0   1      10              12.0
1   2      30              40.0
2   3     100               NaN
3   4       1               3.0
最小值大于等于[]
对于对象['number']中的i:最小值大于。追加(查找['number'[lookup[lookup['number']>i]。排序值(按='number')。索引[0]])

对象['minimate\u greater']=minimate\u greater

如果值不存在会发生什么?我认为如果不存在
minimate\u greater
每个值row@jezrael您的意思是在对象
{'id':3,'number':100}的情况下
,因为在
查找中没有大于100的数字
?在这种情况下
没有
。是的,没错。请给我一些时间将其添加到我的解决方案中