筛选列表中的熊猫列表

时间:2020-05-13 18:53:27

标签: python python-3.x pandas

我有一个数据框,其中包含该列之一的列表。 例子

df.loc[x,column] 
#returns [1,4,5,6]

当值是1或2或3时,我想选择该行。 我正在考虑在列表中执行此操作,以便可以像这样进行过滤:

filter = [1,2,3]
df_new = df[df[column] is in filter]

但是,它返回了我 “系列的真相含糊不清。”

如果我尝试这样做:

filter = [1,2,3]
df_new = df[df[column].isin(filter)]

它返回我 <built-in method view of numpy.ndarray object at 0x000001E0CDF09440> returned a result with an error set

我尝试使用任何方法,但在这里似乎不起作用。 我还查看了np.select或使用管道“ |”发布的其他线程但这并不真正适用于此。可以 ? 有小费吗 ?

简化示例数据框:

   column
0  [1,2]
1  [3,4]
2  [5]
3  []
4  [7,8]
5  [5,3]

预期的输出(过滤1、2或3):

   column
0  [1,2]
1  [3,4]
5  [5,3]

2 个答案:

答案 0 :(得分:2)

您可以使用Series.applycolumn上应用自定义函数,从而创建 boolean mask 。此自定义函数检查系列的每个单独项目,以查找该项目中是否有任何元素也存在于过滤器列表中。

使用:

lst = [1, 2, 3] # filter list
m = df[column].apply(lambda s: len(set(s) & set(lst)) > 0)
print(df[m])

此打印:

       column
0      [1, 2]
1      [3, 4]
5      [5, 3]

答案 1 :(得分:0)

除非您需要更复杂的东西,否则您将非常接近熊猫的工作方式

df.loc[df[column].isin([filter])]