仅需要 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
不会删除行,它会根据值是否在给定列表中将单元格标记为 True
或 False
。因此,您的 True
/False
数组与原始 df 具有相同的索引,当您执行 df[array]
时,它采用该数组的索引,也就是相同的索引。
不是每个单元格 True
或 False
,而是每行 - 此时 pandas 将按照您想要的方式进行过滤。
仅需要 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|..............|675Note:- 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
不会删除行,它会根据值是否在给定列表中将单元格标记为 True
或 False
。因此,您的 True
/False
数组与原始 df 具有相同的索引,当您执行 df[array]
时,它采用该数组的索引,也就是相同的索引。
不是每个单元格 True
或 False
,而是每行 - 此时 pandas 将按照您想要的方式进行过滤。