python - 如何检查值是否在一个单元格中的两个数字之间
问题描述
我有两列的数据集:
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
解决方案
我使用了预期输出数据帧的间隔,其中左侧低于右侧。这是使用的一种方法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