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