изменить значения фрейма данных на основе другого столбца - PullRequest
0 голосов
/ 30 мая 2020
data = {'Payment_type' =['Mastercard','Visa','Visa','Diners'],'Price' = [1200,600,300,5000]}

Я борюсь с тем, как изменить цену в зависимости от типа оплаты. Это то, что я кодирую, и это неправильно

for i in df['Payment_Type']:
    if i == 'Visa':
        df['Price']*0.01
    elif i=='Matercard':
        df['Price']*0.02
    elif  i == 'Diners':
        df['Price']*0.03
    else:
        df['Price']*0.04

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Давайте попробуем создать dict с map

d = dict(zip(cards, [0.01,0.02,0.03]))
data.price = data.price*data.card.map(d).fillna(0.04)
0 голосов
/ 30 мая 2020

Вы можете сделать это следующим образом:

cards = ['Visa','Mastercard','Diners']

for card in cards: 
    if card == 'Visa': 
        df.loc[df['Payment_type']==card,'Price'] *= 0.01
    elif card == 'Mastercard':
        df.loc[df['Payment_type']==card,'Price'] *= 0.02
    elif card == 'Diners':
        df.loc[df['Payment_type']==card,'Price'] *= 0.03    
else:     
    df.loc[~df['Payment_type'].isin(cards),'Price'] *= 0.04 

Здесь используется ветвь else из for l oop, которую всегда интересно применять на практике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...