Панды применяют скидки, используя одинаковые значения ячеек в разных таймфреймах - PullRequest
0 голосов
/ 31 октября 2018

Я в отчаянии. Я решаю эту проблему уже 3 дня. Я попробовал все решения в подобных постах. Мое решение работало на других фреймах данных, но на этом не работает. У меня есть два набора данных: один содержит товар, обычную цену и столбец группы скидок. Второй - дисконтная группа и дисконт этой группы. Мне нужно взять товар, получить группу скидок, найти скидку и умножить ее на цену. Но в некоторых строках я получаю ошибку. Вот мой код:

for index, row in df1.iterrows():

   discount_group = df1['Discount group'][index]
   #this returns data frame with discount group and relevant discount
   discounts_df = df2.loc[df2['Discount group'] == discount_group], 'Discount'
   discount = discounts_df[0].values[0][1]
   row ['Discounted price'] = row['Price'] * discount

Но в некоторых случаях discounts_df = df2.loc[df2['Discount group'] == discount_group], 'Discount' возвращает пустой фрейм данных. Я конвертировал столбцы групп скидок в плавающие, чтобы не было несовпадения типов с df1['RG'] = df1['Discount group'].astype(float). Это не помогло.

Может быть, есть другое решение?

Спасибо за помощь!

1 Ответ

0 голосов
/ 31 октября 2018

Использование .merge() было бы лучшим решением, чем .iterrows() Я думаю. .merge() разрешает соединения в стиле базы данных, см. документацию . Вот игрушечный пример, который применяет процентную скидку (от 0 до 1) к столбцу цен.

import pandas as pd
import numpy as np

facts = pd.DataFrame(
    {
        'price': np.random.randn(10),
        'discount_id': np.tile([1, 2], 5)
    }
)

discount = pd.DataFrame(
    {
        'discount_id': [1, 2],
        'discount_value': [.5, .1]
    }
)

merged = facts.merge(discount, on = 'discount_id')

# Adapt this line to apply your specific discounting logic.

merged['discounted_price'] = merged['price'] - (merged['price'] * merged['discount_value'])

print(merged)

Дает:

      price  discount_id  discount_value  discounted_price
0 -0.186169            1             0.5         -0.093084
1 -1.345143            1             0.5         -0.672572
2 -0.044090            1             0.5         -0.022045
3  0.325579            1             0.5          0.162790
4  0.794152            1             0.5          0.397076
5  1.271465            2             0.1          1.144318
6  1.041492            2             0.1          0.937342
7 -0.774214            2             0.1         -0.696793
8  0.917996            2             0.1          0.826196
9  1.055927            2             0.1          0.950334
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...