代码之家  ›  专栏  ›  技术社区  ›  Hatshepsut

查找大于当前值的最小值

  •  1
  • Hatshepsut  · 技术社区  · 7 年前

    我有一个 objects 表和a lookup 桌子在 物体 表中,我希望从 大于对象大小的表 number .

    我找到了这个 similar question

    代码:

    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},
        ]
    )
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    首先比较每个值 lookup['number'] 通过 objects['number'] cumsum 并将第一个值与 1 并通过 numpy.argmax 对于设置值 查找['number'] .

    输出是使用 numpy.where 用于将所有不匹配的值覆盖到 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
    
        2
  •  0
  •   Jasdeep Rana    7 年前


    对于对象['number']中的i:最小值大于0.append(查找['number'[lookup[lookup['number']);i] .sort_值(按='number')。索引[0]])