Нужно выбрать только те строки, где хотя бы одно значение присутствует в списке - PullRequest
1 голос
/ 25 февраля 2020

Необходимо выбрать только те строки, в которых присутствует хотя бы одно значение из списка.

Я пытался использовать функцию isin, как показано ниже, но она также возвращает те строки, которые не имеют никакого значения из списка: -

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

Примечание: - P_1 to P_90 указанный диапазон столбцов. Пример данных: - dib-cust_id | p_1 | p_2 | ....... | p_90 345 | 1950 | 1860 | .............. | 675

Примечание : - Я не могу предоставить точные данные, так как это конфиденциально. Выше приведен лишь пример того, как будет выглядеть фрейм данных с 91 столбцом.

Пожалуйста, дайте мне знать, что не так в этом методе и есть ли другой способ получить желаемый результат.

1 Ответ

1 голос
/ 25 февраля 2020

То, что вам нужно, это:

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 отфильтрует, как вы хотите.

...