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

pandas:在由start和stop列定义的多个范围内查找值

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

    我试着用两列 start stop 在另一个数据帧的 age 列。范围在一个称为 intervals :

    start  stop
        1     3
        5     7
    

    年龄在另一个DF中定义:

    age  some_random_value
      1                100
      2                200
      3                300
      4                400
      5                500
      6                600
      7                700
      8                800
      9                900
     10               1000
    

    期望输出值是 年龄 介于中定义的范围之间 间隔 (1-3和5-7):

    age  some_random_value
      1                100
      2                200
      3                300
      5                500
      6                600
      7                700
    

    我试过用numpy.r_,但效果不如我所希望的:

    df.age.loc[pd.np.r_[intervals.start, intervals.stop]]
    

    结果是:

    age  some_random_value
      2                200
      6                600
      4                400
      8                800
    

    任何想法都非常感谢!

    1 回复  |  直到 7 年前
        1
  •  2
  •   jezrael    7 年前

    我想需要参数 closed='both' 在里面 IntervalIndex.from_arrays :

    intervals = pd.IntervalIndex.from_arrays(df2['start'], df2['stop'], 'both')
    

    然后选择匹配值:

    df = df[intervals.get_indexer(df.age.values) != -1]
    print (df)
       age  some_random_value
    0    1                100
    1    2                200
    2    3                300
    4    5                500
    5    6                600
    6    7                700
    

    细节 :

    print (intervals.get_indexer(df.age.values))
    [ 0  0  0 -1  1  1  1 -1 -1 -1]