检查值是否在DataFrame系列中(“系列的真值不明确”错误)

时间:2019-06-12 21:42:22

标签: python pandas dataframe

我正在尝试查看DataFrame列中的值是否包含在单独列中的系列中。我收到“ ValueError:系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。”

我已经对此进行了研究,但不太了解为什么在此特定情况下会收到此错误。

我尝试使用两个.contains函数。

DataFrame结构的简化版本如下:

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)

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

在少数情况下,我们可以使用apply来检查idid_list的存在:

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

答案 1 :(得分:1)

您仍然可以使用循环

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

在这种情况下,您无需更改数据类型

答案 2 :(得分:0)

一点点列表理解魔术应该起作用:

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