python - Pandas:查找由开始列和停止列定义的多个范围内的值

标签 python pandas

我尝试使用两列 startstop 在另一个数据帧的 age 列中定义多个值范围。范围在名为 intervals 的 df 中定义:

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

非常感谢任何想法!

最佳答案

我相信 IntervalIndex.from_arrays 中需要参数 close='both' :

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]

关于python - Pandas:查找由开始列和停止列定义的多个范围内的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50714700/

相关文章:

python - 如何将 Python 字典转换为 Class 对象

python - Pandas 系列中的复制警告

Python Pandas 检查一个值是否在同一天出现多次

Python 与 SQL 外连接给出不同的结果。为什么?

python - 如何修复 Snowflake 数据库写入错误 : snowflake. Connector.errors.ProgrammingError) 001003 (42000)

Python "Error ' dict' 对象没有属性 'load' "

python - 如何连接具有不相等行数和不同列名的数据框

python - 在 docker 中部署一个最小的 flask 应用程序 - 服务器连接问题

python - cumsum() 在多个列上

python - 如何从 Pandas 数据框中的字典中删除大括号、撇号和方括号 (Python)