如果一个或另一个值在列表中,则尝试使布尔值标志读取为TRUE。下面的代码返回第1行的FALSE,我不确定为什么,有人可以帮我理解为什么第一行返回FALSE吗?
lists={'someList!':[[1,2,12,6,'ABC'],[1000,4,'z','a','bob']]}
dfLists = pd.DataFrame(lists)
dfLists['contains?']=dfLists['someList!'].isin([0,1])
答案 0 :(得分:0)
有人可以帮助我理解为什么第一行返回FALSE吗?
这不起作用,因为.isin(values)
返回了系列中的每个元素是否包含在values
中。
您可以将{0, 1}
用作集合,并将其交集的真实性应用于每个列表:
>>> s = {0, 1}
>>> dfLists['someList!'].apply(lambda x: bool(s.intersection(x)))
0 True
1 False
这有效地做到了:
>>> s.intersection([1, 2, 12, 6, 'ABC'])
{1}
>>> s.intersection([1000, 4, 'z', 'a', 'bob'])
set()
第一个结果的bool
是True
,因为它是非空的。
答案 1 :(得分:0)
使用Dataframe构造函数将list
列展平,然后使用isin
pd.DataFrame(dfLists['someList!'].tolist()).isin([1,2]).any(1)
Out[39]:
0 True
1 False
dtype: bool
答案 2 :(得分:0)
您正在向数据框传递一个列表列表。它将整数与列表进行比较,因此找不到匹配项。
像这样明确定义您的列,isin应该起作用。
lists={'someList!':[1,2,12,6,'ABC'], 'someList2':[1000,4,'z','a','bob']}