仅需要 select 列表中至少存在一个值的那些行

Need to select only those rows where at least one value is present from the list

仅需要 select 列表中至少存在一个值的那些行。

我尝试使用如下所示的 isin 函数,但它也返回那些在列表中没有任何值的行:-

df[(df.loc[:,'P_1':'P_90'].isin(list))]

Note:-P_1 to P_90 indicated range of columns. Sample data:- dib-cust_id|p_1|p_2|.......|p_90 345|1950|1860|..............|675

Note:- I can't provide exact data as it's confidential. Above is just an example how dataframe will look like with 91 columns.

请告诉我这个方法有什么问题,还有没有其他方法可以得到想要的结果。

您需要的是:

df[df.loc[:,'P_1':'P_90'].isin(list())].dropna(how='all')

好的,所以这 nan 是任何不匹配的值,因此您实际上需要:

df[df[df.loc[:,'P_1':'P_90'].isin(list())].dropna(how='all').index]

这绝对不是最有效的。

您当前的公式不起作用的原因是您返回的基本上是 True/False 和 isin 的数组,而不是列表。 isin 不会删除行,它会根据值是否在给定列表中将单元格标记为 TrueFalse。因此,您的 True/False 数组与原始 df 具有相同的索引,当您执行 df[array] 时,它采用该数组的索引,也就是相同的索引。

不是每个单元格 TrueFalse,而是每行 - 此时 pandas 将按照您想要的方式进行过滤。