Замена значений в ячейке Pandas через функцию

Идель

Новичок
Пользователь
Окт 24, 2020
4
0
1
Здравствуйте, я начинающий питонист, и у меня проблема: Я пытаюсь заменить значения в каждой ячейке DF через функцию, но времени это занимает очень долго, кто может подсказать, как можно оптимизировать данную фишку?

Python:
def bonus(arg):

  '''
  Input : Строка таблицы
Берётся 8-ая ячейка этой строки.
Проверка на наличие "%",если оно есть, то мы удаляем из этой ячейки его, потом удаляем
все пробелы, преобразуем в float, делим на 100, ведь это проценты.
Потом умножаем уже на стоимость дома и переводим в тысячи.
Если там 0, то возвращаем 0
Если там ни 0, ни %, значит там указан бонус. Удаляем пробелы и "руб.",
переводим в float и в тысячи
  OutPut: Число - Бонус агенту
  '''
  if '%' in arg[8]:
        return float(arg[8].replace('%','').replace(' ',''))/100*arg[7]/1000
  if arg[8]=='0':
    return 0
  else:
    return float(arg[8].replace('руб.','').replace(' ',''))/1000




Python:
for i in range(msc_2.shape[0]):
  msc_2['Бонус агенту'][i] = bonus(msc_2.iloc([i])

1603529015853.png
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
находится не в круглых скобках, а в кватратных, просто сайт квадратные скобки убирает
чтобы не убирал код надо вставлять через теги code, соблюдая отступы, где пишите чуть выше есть три точки -> код и туда вставляете фрагмент кода
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Screenshot 2020-10-26 at 17.18.02.png
 

Идель

Новичок
Пользователь
Окт 24, 2020
4
0
1
Python:
def bonus(arg_1,arg_2):
  '''
  Input : Строка таблицы
    Проверка на наличие "%",
  если оно есть, то мы удаляем из этой ячейки его, потом удаляем
  все пробелы, преобразуем в float, делим на 100, ведь это проценты.
  Потом умножаем уже на стоимость дома и переводим в тысячи.
    Если там 0, то возвращаем 0
    Если там ни 0, ни %, значит там указан бонус. Удаляем пробелы и "руб.",
    переводим в float и в тысячи
   OutPut: Число - Бонус агенту
  '''
  if '%' in arg_1:
    return float(arg_1.replace('%','').replace(' ',''))/100*arg_2
  if arg_1=='0':
    return 0
  else:
    return float(arg_1.replace('руб.','').replace(' ',''))/1000



msc_2['Бонус агенту'] = [bonus(msc_2.loc[idx,'Бонус агенту'],msc_2.loc[idx,'Цена']) for idx in range(len(msc_2))]


я так смог решить данную проблему
 

alext

Популярный
Пользователь
Май 10, 2020
288
66
28
Жесть какая. Ну ок.
 

Форум IT Специалистов