选择可以在列表中找到编号的行

时间:2019-11-13 13:49:26

标签: pandas

给出以下数据

enter image description here

我希望选择numlist出现的行。在这种情况下,它将选择第1行和第2行,未选择第3行,因为在3中找不到[4,5]

下面是数据框,我们应该如何编写过滤查询?

cat1=pd.DataFrame({"num":[1,2,3],
                 "list":[[1,2,3],[3,2],[4,5]]})

2 个答案:

答案 0 :(得分:4)

将列表理解的一种可能解决方案zipin传递给boolean indexing

df = cat1[[a in b for a, b in zip(cat1.num, cat1.list)]]

或者将DataFrame.applyaxis=1一起用于每行处理的解决方案:

df = cat1[cat1.apply(lambda x: x.num in x.list, axis=1)]

或创建DataFrame并测试成员资格:

df = cat1[pd.DataFrame(cat1.list.tolist()).isin(cat1.num).any(axis=1)]

print (df)
   num       list
0    1  [1, 2, 3]
1    2     [3, 2]

答案 1 :(得分:1)

如果您使用的是熊猫.25,则使用另一种解决方案:explode()

cat1[cat1['num'].isin(cat1.explode('list1').query("num==list1").loc[:,'num'])]

   num      list1
0    1  [1, 2, 3]
1    2     [3, 2]