Как использовать функцию применения панд ко всем столбцам некоторых строк фрейма данных

у меня есть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

Есть ли способ сделать это, используя функциональность панды, избегая петель

Ответы на вопрос(2)

Метод на основе 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
 EdChum21 июл. 2016 г., 11:27
Это разумно, но может не масштабироваться, если в OP есть много столбцов, которые заменяют +1, хотя
Решение Вопроса

использование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
 NG_2121 июл. 2016 г., 11:20
Спасибо @EdChum. Но работает ли это эффективно с около 500 столбцами и 1 млн строк
 EdChum21 июл. 2016 г., 11:21
это должно быть сделано, по сути вы используете логическую маску для выбора интересующих строк, вы передаете список столбцов, для которых вы хотите заменить значения, это будет намного быстрее, чем при использованииapply

Ваш ответ на вопрос