首页 > 解决方案 > 如何检查值是否在一个单元格中的两个数字之间

问题描述

我有两列的数据集:

import pandas as pd
dict = {'val':["3.2", "2.4", "-2.3", "-4.9"], 
        'conf_interval': ["[-0.83, -1.78]", "[0.71, 2.78]", "[-0.91, -2.28]", "[-0.69, -2.14]"]} 
df = pd.DataFrame(dict) 
df
    val     conf_interval
0   3.2     [-0.83, -1.78]
1   2.4     [0.71, 2.78]
2   -2.3    [-0.91, -2.28]
3   -4.9    [-0.69, -2.14]

我想检查 column 中的哪些值val介于 column 中的两个值之间conf_interval。唯一的方法是将conf_interval列拆分为两列吗?或者还有其他方法不拆分此列?期望的输出是这样的:

    val     conf_interval    result
0   3.2     [-1.78, -0.83]   False
1   2.4     [0.71, 2.78]     True
2   -2.3    [-2.28, -0.91]   False
3   -4.9    [0.69, 2.14]     False

标签: pythonpandaslist

解决方案


我使用了预期输出数据帧的间隔,其中左侧低于右侧。这是使用的一种方法pd.IntervalIndex

from ast import literal_eval

df['conf_interval'] = df.conf_interval.map(literal_eval)
df['val'] = pd.to_numeric(df.val)

intervals = pd.IntervalIndex.from_tuples(list(map(tuple, df.conf_interval)))
df['result'] = intervals.contains(df.val)

print(df)

 val   conf_interval  result
0  3.2  [-1.78, -0.83]   False
1  2.4    [0.71, 2.78]    True
2 -2.3  [-2.28, -0.91]   False
3 -4.9    [0.69, 2.14]   False

推荐阅读