那是我的数据
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强文本相同,我想进行分组,并且price1 + price2 + price 3也与第一个EAN相同。此外,数量列必须加总。价格1,2,3不应该相加。 ID =索引
所需的输出:
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 ) & (data["sales_channel"].isin( filter_sales_channel))]
print(to_slsrpt[['combined_date', 'EAN', 'quantity', 'price1', 'price2', 'price3']])
谢谢。
答案 0 :(得分:0)
您可以按多种条件对数据进行分组:
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