product_code order eachprice
TN45 10 500
BY11 20 360
AJ21 5 800
и мне нужно создать новый столбец на основе заказа и каждой цены, если заказ> = 10, затем скидка 5%, заказ> = 50, затем скидка 10% на цену, как я могу применить функцию для достижения этого:
product_code order each_price discounted_price
TN45 10 500 4500
BY11 20 360 6480
AJ21 5 800 4000
я пытался применить функцию, например, df['discount'] = df.apply(function, axis=1)
но при ошибках появляется сообщение «Попытка установить значение для копии фрагмента из DataFrame. Попробуйте вместо этого использовать.loc[row_indexer,col_indexer] = value»
кто-нибудь может помочь? спасибо
Решение проблемы
Для этого можно использовать вложенные numpy.whereвызовы. Я добавил дополнительный промежуточный столбец к результатам процентной скидки, а затем использовал этот столбец для расчета окончательной цены со скидкой:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'product_code': ['TN45', 'BY11', 'AJ21'],
'order': [10, 20, 5],
'each_price': [500, 360, 800]
})
df['discount'] = np.where(
df['order'] >= 50,
0.1,
np.where(
df['order'] >= 10,
0.05,
0
)
)
df['discounted_price'] = df['order'] * df['each_price'] * (1 - df['discount'])
Обратите внимание, что мои результаты немного отличаются от ваших ожидаемых результатов, но я считаю, что они верны, основываясь на описании условий скидки, которое вы дали:
product_code order each_price discount discounted_price
0 TN45 10 500 0.05 4750.0
1 BY11 20 360 0.05 6840.0
2 AJ21 5 800 0.00 4000.0
Комментариев нет:
Отправить комментарий