2015-11-03 4 views
2

При повторении строк в DataFrame, как изменить значение одного элемента на основе значения для другого элемента в той же строке?Итерация через строки Pandas DataFrame - изменить значение серии на основе значений в другой серии?

У меня есть следующий код:

for index, row in df.iterrows(): 
    if (row["A"] in mult): 
     row["B"] = row["B"] * mult[row["A"]] 

Это итерацию по каждой строке и видит, если значение в «А» присутствует в качестве ключа в словаре (mult). Если он находится в словаре, серия «B» умножается на значение с плавающей запятой, поступающее из словаря.

Код запускается без сообщения об ошибке - но когда я исследую df, он не изменился в DataFrame.

Спасибо - Стив

ответ

3

Прежде всего, вы пытаетесь инициализировать локальную переменную row. Правильный код может быть следующим:

for index,row in df.iterrows(): 
    if row["A"] in mult: 
     df["B"].iloc[index] = row["B"] * mult[row["A"]] 

Однако, это некрасивый способ обработки среднего размера или большие DataFrames. Более pythonic решение может быть следующим:

df["B"] = df.apply(lambda x: x["B"] * mult[x["A"]] if x["A"] in mult else x["B"], axis=1) 
+0

Это сработало! Спасибо @night_bat! Теперь мне нужно больше узнать о лямбда-функции –

Смежные вопросы