问题
I have a dataframe
. I want to replace values of all columns of some rows to a default value. Is there a way to do this via pandas apply
function
Here is the dataframe
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']
How to replace values in columns a
and b
to default value 0,where value of column c
is in mylist
Is there a way to do this using pandas functionality,avoiding for loops
回答1:
Use isin to create a boolean mask and use loc
to set the rows that meet the condition to the desired new value:
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
result of the inner 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
回答2:
NumPy based method would be to use np.in1d to get such a mask and use it like so -
mask = np.in1d(temp.c,mylist)
temp.ix[mask,temp.columns!='c'] = 0
This will replace in all columns except 'c'
. If you are looking to replace in specific columns, say 'a'
and 'b'
, edit the last line to -
temp.ix[mask,['a','b']] = 0
来源:https://stackoverflow.com/questions/38499890/how-to-use-pandas-apply-function-on-all-columns-of-some-rows-of-data-frame