数据框:基于值应用于两列

时间:2018-10-18 10:40:46

标签: python pandas dataframe multiple-columns apply

说我有一个简单的数据框,例如:

import pandas as pd

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

桌子看起来像这样
simple dataframe

现在说我有一个简短的列表,to_remove = ['b','d']
如何在数据框上找到“字母”列的值位于“ to_remove”中的行,并将“字母”和“数字”中的这行都修改为“无”?所以我留下的是
a 1
无无
c 3
无无
e 5

寻找了几个小时。谢谢!!

2 个答案:

答案 0 :(得分:1)

使用isin来按值列表进行检查,并通过loc来设置None

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,将~的boolena掩码反转:

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

答案 1 :(得分:1)

或者可以将df.eval用于df.loc

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

但是由于不,您只是列出要分配的数据框的所有列,所以为什么不这样做:

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