我有dataframe
。我想将某些行的所有列的值替换为默认值。有没有办法通过pandas apply
函数
这是数据框
import pandas as pd
temp=pd.DataFrame({'a':[1,2,3,4,5,6],'b':[2,3,4,5,6,7],'c':['p','q','r','s','t','u']})
mylist=['p','t']
如何将列a
和b
中的值替换为默认值0,其中列c
的值位于mylist
有没有办法使用pandas功能,避免循环
答案 0 :(得分:3)
使用isin
创建一个布尔掩码,并使用loc
将符合条件的行设置为所需的新值:
In [37]:
temp.loc[temp['c'].isin(mylist),['a','b']] = 0
temp
Out[37]:
a b c
0 0 0 p
1 2 3 q
2 3 4 r
3 4 5 s
4 0 0 t
5 6 7 u
内部isin
:
In [38]:
temp['c'].isin(mylist)
Out[38]:
0 True
1 False
2 False
3 False
4 True
5 False
Name: c, dtype: bool
答案 1 :(得分:1)
基于NumPy的方法是使用np.in1d
来获取这样的掩码并像这样使用它 -
mask = np.in1d(temp.c,mylist)
temp.ix[mask,temp.columns!='c'] = 0
这将替换除'c'
以外的所有列。如果您要替换特定列,请说出'a'
和'b'
,请将最后一行编辑为 -
temp.ix[mask,['a','b']] = 0