GOOGLE ADS

среда, 13 апреля 2022 г.

Фрейм данных панды с применением нескольких столбцов

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

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...