объединить значения одного фрейма данных со столбцами одного фрейма - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть одна трудность здесь.Моя цель состоит в том, чтобы создать список продаж для одного магазина с одним фреймом данных, в котором перечислены цены по продуктам, а другой - со всеми продажами с точки зрения продуктов и количества (за один период времени)

DataFrame 1:цены

prices = pd.DataFrame({'qty_from' : ('0','10','20'), 'qty_to' : ('9','19','29'), 'product_A' :(50,30,10),'product_B' :(24,14,12),'product_C' :(70,50,18)})

DataFrame 2: продажи

sales = pd.DataFrame({'product' : ('product_b','product_b','product_a',product_c,product_b), 'qty' : ('4','12','21','41','7')})

Я хотел бы получать обороты построчно в рамках DataFrame 'sales', с одним другим столбцом, таким как 'TurnOver'

Я использовал

pd.merge_asof(sales, prices, left_on='qty', right_on='qty_from', direction='backward') 

, и он дал мне правильную цену за проданное количество, но как получить хорошую цену, связанную с одним продуктом?Как объединить значение в фрейме данных «продажи», например «product_b», с именем столбца в ценах фрейма данных, здесь «product_b», а затем применить расчет для получения оборота?

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

Эрик

1 Ответ

0 голосов
/ 27 февраля 2019

Если я правильно понимаю, вы можете изменить цены в кадре данных, чтобы использовать параметр by в merge_asof, используя stack:

#modify price
prices_stack = (prices.set_index(['qty_from','qty_to']).stack() # then products become as a column
                     .reset_index(name='price').rename(columns={'level_2':'product'}))

# uniform the case
sales['product'] = sales['product'].str.lower()
prices_stack['product'] = prices_stack['product'].str.lower()
# this is necessary with your data here as not int
sales.qty = sales.qty.astype(int)
prices_stack.qty_from = prices_stack.qty_from.astype(int)

#now you can merge_asof adding by parameter
sales_prices = (pd.merge_asof( sales.sort_values('qty'), prices_stack, 
                               left_on='qty', right_on='qty_from', 
                               by = 'product', #first merge on the column product
                               direction='backward')
                  .drop(['qty_from','qty_to'], axis=1)) #not necessary columns

print (sales_prices)
     product  qty  price
0  product_b    4     24
1  product_b    7     24
2  product_b   12     14
3  product_a   21     10
4  product_c   41     18
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...