我有一个数据框,其中包含该列之一的列表。 例子
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]
答案 0 :(得分:2)
您可以使用Series.apply
在column
上应用自定义函数,从而创建 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])]