Python:如何检查值列表是否包含在某个范围内

标签 python pandas dataframe range

我正在使用一个数据帧结构的值列表,我想将此列表中的每个值与另一个数据帧进行比较(有点像下面的这个):

Name    Start    End
Blue    10       28
Red     23       25
Green   89       107
Purple  168      216
Yellow  21       40

现在我们假设值列表如下所示:

Name    Value
W       37
X       176
Y       43
Z       96

对于“值”列中的每个元素,我想检查该值是否包含在第一个数据帧的每个“开始”-“结束”范围内,并将其添加到列表中(即 contained = [])。在示例中,W (37) 包含在 黄色 中,X (176) 包含在 紫色 中, Z (96)绿色,而 Y 不匹配,因此将被排除(或添加到另一个列表not_contained = [])。 我怎样才能做到这一点?谢谢大家。

最佳答案

您可以将数据框转换为字典,然后查找系列中的每个项目。

import pandas as pd

ser = pd.Series(index=list("WXYZ"), data=[37, 176, 43, 96], name="Value")

df = pd.DataFrame(
    {
        "Start": [10, 23, 89, 168, 21],
        "Name": ["Blue", "Red", "Green", "Purple", "Yellow"],
        "End": [28, 25, 107, 216, 40],
    }
)
df_dict = df.set_index(["Start", "End"])["Name"].to_dict()

ser.apply(
    lambda x: next(
        (color for bounds, color in df_dict.items() if x in range(*bounds)), None
    )
)

这给出了

W    Yellow
X    Purple
Y      None
Z     Green
Name: Value, dtype: object

这个想法是使 df_dict 成为一个以键作为边界的字典:

{(10, 28): 'Blue',
 (23, 25): 'Red',
 (89, 107): 'Green',
 (168, 216): 'Purple',
 (21, 40): 'Yellow'}

然后循环遍历您的系列,询问每个元素 x 是否在边界之间,使用以下事实:

`

7 in range(3,5)
# False

7 in range(3,10)
# True

关于Python:如何检查值列表是否包含在某个范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69256928/

相关文章:

python - 使用 selenium 从 textarea 清除文本

python - 如何以编程方式从 wx.html2.WebView wxpython 对象填充文本框?

python - Sentry-youtrack 插件 : PicklingError: Can't pickle <type 'generator' >: attribute lookup __builtin__. 生成器失败

python - 开源 Enthought Python 替代方案

python - 在Python中从数据帧创建字典

python - 如何取消对 pandas 中的列进行分类

python - Instaloader 中的 2FA 失败

python - Pandas :.groupby().size() 和百分比

python - Pandas 掉落行为

python - 基于多条件检查将值放在另一个数据框中的 pandas 数据框中的列中