pandas groupby и условие sum if

#python #pandas #pandas-groupby

#python #панды #pandas-groupby

Вопрос:

это мои данные:

 ID;combined_date;EAN;quantity;price1;price2;price3
22138999;20200901;1111111111111;1;5.00;10.00;15.00
22137507;20200901;2222222222222;1;5.00;10.00;15.00
22139440;20200901;1111111111111;1;5.00;15.00;20.00
22138875;20200901;1111111111111;1;5.00;10.00;15.00
  

Я хочу сгруппировать, совпадает ли EAN с другим сильным текстом EAN в этих данных amp; price1 price2 price 3 также совпадает с первым EAN. Кроме того, столбец количества должен суммироваться. price1,2,3 не должны суммироваться. ИДЕНТИФИКАТОР = индекс

Желаемый результат:

 ID;combined_date;EAN;quantity;price1;price2;price3
22138999;20200901;1111111111111;2;5.00;10.00;15.00
22137507;20200901;2222222222222;1;5.00;10.00;15.00
22139440;20200901;1111111111111;1;5.00;15.00;20.00
  

Пока что я могу считывать данные из файла Excel и получать отфильтрованные выходные данные на основе некоторых условий фильтрации, но я не продвинулся дальше с группировкой этих данных.

 import pandas as pd

current_file = slsrpt_new.xls

data = pd.read_excel(current_file)
data.set_index('ID', inplace=True)

filter_brand = ['some filter']
filter_sales_channel = ['some filter']

data = data.astype({'EAN': 'str'}).replace('.0', '', regex=True)
data['price1'] = data['price1'].astype('float').map("{:,.2f}".format)
data['price2'] = data['price2'].astype('float').map("{:,.2f}".format)
data['price3'] = data['price3'].astype('float').map("{:,.2f}".format)

data["combined_date"] = data["Year"].astype(str)   data['Month'].astype('int64').map("{:02}".format)   data['Day'].astype('int64').map("{:02}".format)

to_slsrpt = data[data['brand'].isin( filter_brand ) amp; (data["sales_channel"].isin( filter_sales_channel))]

print(to_slsrpt[['combined_date', 'EAN', 'quantity', 'price1', 'price2', 'price3']])
  

Спасибо.

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

1. опубликуйте ваш код witten

2. извините, сделано….

Ответ №1:

вы можете группировать данные по нескольким условиям:

 df.groupby(['EAN','price1','price2','price3']).sum()
  

дает вам

                                     quantity
EAN           price1 price2 price3          
1111111111111 5.00   10.00  15.00          2
                     15.00  20.00          1
2222222222222 5.00   10.00  15.00          1