如何在某些数据帧行的所有列上使用pandas应用函数

时间:2016-07-21 09:12:45

标签: python pandas data-manipulation

我有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']

如何将列ab中的值替换为默认值0,其中列c的值位于mylist

有没有办法使用pandas功能,避免循环

2 个答案:

答案 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