How to use pandas apply function on all columns of some rows of data frame

隐身守侯 提交于 2019-12-20 03:04:33

问题


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 bto 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!