我正在尝试查看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)
有更好的方法吗?
答案 0 :(得分:1)
在少数情况下,我们可以使用apply
来检查id
中id_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