Панды удаляют все строки, которые содержат «обязательное значение» во всех столбцах - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий фрейм данных

 A     B    C    D
BUY   150   Q   2018
SELL  63    Q   2018
N      N    N    N

V      v    v    v
SELL  53    Q   2018

Я хочу удалить все строки, которые содержат все столбцы V или N

Кадр выходных данных будет: -

    A     B     C    D
   BUY   150    Q   2018
   SELL  63     Q   2018

   SELL  53     Q   2018

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Использование pd.DataFrame.apply с set для создания логической маски:

res = df[~(df.apply(set, axis=1) <= set('NnVv'))]

print(res)

      A    B  C     D
0   BUY  150  Q  2018
1  SELL   63  Q  2018
4  SELL   53  Q  2018

Примечание <= является синтаксическим сахаром для set.issubset.

Это хорошо масштабируется для большого количества столбцов.Используйте @ jezrael's pd.DataFrame.all решение для большого числа строк.

0 голосов
/ 06 июня 2018

replace + dropna (Обратите внимание: ключ thresh здесь)

df.replace(dict(zip(list('NnVv'),[np.nan]*4))).dropna(thresh=1)
Out[513]: 
      A    B  C     D
0   BUY  150  Q  2018
1  SELL   63  Q  2018
4  SELL   53  Q  2018
0 голосов
/ 06 июня 2018

Использование boolean indexing:

df = df[~df.isin(['V', 'v', 'N', 'n']).all(axis=1)]
print (df)
      A    B  C     D
0   BUY  150  Q  2018
1  SELL   63  Q  2018
4  SELL   53  Q  2018

Детализация :

Первое сравнение по isin:

print (df.isin(['V', 'v', 'N', 'n']))
       A      B      C      D
0  False  False  False  False
1  False  False  False  False
2   True   True   True   True
3   True   True   True   True
4  False  False  False  False

Получить строки, если all True с на строки:

print (df.isin(['V', 'v', 'N', 'n']).all(axis=1))
0    False
1    False
2     True
3     True
4    False
dtype: bool

Инвертировать условие по ~:

print (~df.isin(['V', 'v', 'N', 'n']).all(axis=1))
0     True
1     True
2    False
3    False
4     True
dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...