То, что вам нужно, это:
df[df.loc[:,'P_1':'P_90'].isin(list())].dropna(how='all')
Хорошо, так что это nan
s любые несоответствующие значения, так что вам на самом деле нужно:
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 отфильтрует, как вы хотите.