фреймы данных: применяются к двум столбцам на основе значений - PullRequest
0 голосов
/ 18 октября 2018

скажем, у меня есть простой фрейм данных, например:

import pandas as pd

data = {'letters' : ['a','b','c','d','e'], 'numbers' :[1,2,3,4,5]}
df = pd.DataFrame(data)

таблица выглядит следующим образом
простой фрейм данных

теперь говорят, что у меня короткийlist, to_remove = ['b','d']
как я могу найти строки в моем фрейме данных, где значение столбца 'letters' находится в 'to_remove', и изменить эту строку ОБА в 'letters' и 'numbers' на None?так что я остался с
a 1
Нет Нет
c 3
Нет Нет
e 5

искал несколько часов.спасибо !!

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Или можно использовать df.eval для df.loc:

df.loc[df.eval('letters in @to_remove'),['letters','numbers']]=None

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

df.loc[df.eval('letters in @to_remove')]=None
0 голосов
/ 18 октября 2018

Используйте isin для проверки по списку значений и установите None по loc:

to_remove = ['b','d']

df.loc[df['letters'].isin(to_remove), ['letters','numbers']] = None
#all columns
#df.loc[df['letters'].isin(to_remove)] = None
print (df)
  letters  numbers
0       a      1.0
1    None      NaN
2       c      3.0
3    None      NaN
4       e      5.0

Если хотите фильтровать строки, используйте boolean indexing путем инвертирования логической маски по ~:

df1 = df.loc[~df['letters'].isin(to_remove)]
print (df1)
  letters  numbers
0       a        1
2       c        3
4       e        5
...