检查值是否在数据帧序列中(“序列的真值不明确”错误)

2024-04-26 22:55:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图检查DataFrame列中的值是否包含在单独列中的序列中。我收到的是“ValueError:序列的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()

我已经对此进行了研究,但不太明白为什么在这个特定的实例中我会收到这个错误。你知道吗

我试过使用这两个.contains函数。你知道吗

数据帧结构的简化版本如下:

df

index     id       id_list           in_series (desired return column]
1         23       [1,2,34,56,75]    False
2         14       [1,5,14,23,45]    True
3         2        [1,2,4,25,37]     True
4         14       [2,4,34,26,77]    False
5         27       [1,6,19,27,50]    True

a = df['id']
b = df['id_list]
df['in_series'] = b.str.contains(a, regex=False)

有没有更好的办法?你知道吗


Tags: inidfalsetruedataframedf序列item
3条回答

你仍然可以使用循环

id_list=[[1,2,34,56,75],[1,5,14,23,45],[1,2,4,25,37],[2,4,34,26,77],[1,6,19,27,50]]
id=[23,14,2,14,27]
df=pd.DataFrame([id,id_list]).T
df.columns=["id","id_list"]

boo=list()
for i in range(len(df)):
    boo.append(df.iloc[i,0] in df.iloc[i,1])

df["in_series (desired return column]"]=boo

在这种情况下,您不会更改数据的类型

一个小列表理解魔法应该有用:

df['in_series (desired return column'] = ([df.id[i].astype(str) in df.id_list[i] 
                                          for i in range(len(df))])



   print(df)
        index   id  id_list in_series (desired return column)
0   1   23  [1,2,34,56,75]  False
1   2   14  [1,5,14,23,45]  True
2   3   2   [1,2,4,25,37]   True
3   4   14  [2,4,34,26,77]  False
4   5   27  [1,6,19,27,50]  True

我们可以使用apply来检查id_list中存在id的少数情况之一:

df['in_series'] = df.apply(lambda x: str(x['id']) in ', '.join(str(y) for y in x['id_list']),axis=1)

   id             id_list  in_series
0  23  [1, 2, 34, 56, 75]      False
1  14  [1, 5, 14, 23, 45]       True
2   2   [1, 2, 4, 25, 37]       True
3  14  [2, 4, 34, 26, 77]      False
4  27  [1, 6, 19, 27, 50]       True

相关问题 更多 >