方法一:用循环的方法得多个日期的占比
def rate_formula(data,date_list,date_list_tq,brand):
val_list=[]
vol_list=[]
price_list=[]
rate_list=[]
rate_tb_list=[]
for date in date_list:
data_dq=data[data["日期"]==date]
data_tq=data[data["日期"]==date_list_tq[date_list.index(date)]]
total_sales=data_dq.groupby("品牌")[["销额","销量"]].sum()
total_sales_tq=data_tq.groupby("品牌")[["销额","销量"]].sum()
brand_rate_val_dq,brand_rate_val_tq=total_sales["销额"].get(brand,0)/total_sales["销额"].sum()*100,total_sales_tq["销额"].get(brand,0)/total_sales_tq["销额"].sum()*100
brand_rate_vol_dq,brand_rate_vol_tq=total_sales["销量"].get(brand,0)/total_sales["销量"].sum()*100,total_sales_tq["销量"].get(brand,0)/total_sales_tq["销量"].sum()*100
rate_val, rate_val_tb=brand_rate_val_dq,brand_rate_val_dq-brand_rate_val_tq
rate_vol, rate_vol_tb=brand_rate_vol_dq,brand_rate_vol_dq-brand_rate_vol_tq
brand_price,market_price=total_sales["销额"].get(brand,0)/total_sales["销量"].get(brand,0),total_sales["销额"].sum()/total_sales["销量"].sum()
val_list.append(total_sales["销额"].get(brand,0))
rate_list.append(f"{rate_val:.1f}%")
rate_tb_list.append(f"{rate_val_tb:.1f}")
return val_list,rate_list,rate_tb_list
方法二:用索引切片的办法
def rate_formula_1(data, date_list, date_list_tq, cycle_status, brand):
# Filter data for date_list and date_list_tq
data_dq = data[data["日期"].isin(date_list)]
data_tq = data[data["日期"].isin(date_list_tq)]
# Group by date and brand, then calculate total sales, volume, and price for each date and brand
total_val_dq = data_dq.groupby(["日期", "品牌"]).agg({'销额': 'sum', '销量': 'sum'})
total_val_tq = data_tq.groupby(["日期", "品牌"]).agg({'销额': 'sum', '销量': 'sum'})
# Filter data for the specific brand
total_val_dq_brand = total_val_dq.loc[pd.IndexSlice[:, brand], :]
total_val_tq_brand = total_val_tq.loc[pd.IndexSlice[:, brand], :]
total_val_dq_market=total_val_dq.groupby(level=0).sum()
total_val_tq_market=total_val_tq.groupby(level=0).sum()
# Calculate brand rate for value and volume for each date
brand_rate_val_dq = total_val_dq_brand["销额"] / total_val_dq_market["销额"] * 100
brand_rate_val_tq = total_val_tq_brand["销额"] / total_val_tq_market["销额"] * 100
brand_rate_vol_dq = total_val_dq_brand["销量"] / total_val_dq_market["销量"] * 100
brand_rate_vol_tq = total_val_tq_brand["销量"] / total_val_tq_market["销量"] * 100
# Calculate rate and rate_tb for value and volume
rate_val = brand_rate_val_dq.values
rate_val_tb = brand_rate_val_dq.values - brand_rate_val_tq.values
rate_vol = brand_rate_vol_dq.values
rate_vol_tb = brand_rate_vol_dq.values - brand_rate_vol_tq.values
# Combine the results
val_list = total_val_dq_brand.reset_index(drop=True)
print(val_list)
rate_list = [f"{rate:.1f}%" for rate in rate_val]
rate_tb_list = [f"{rate_tb:.1f}" for rate_tb in rate_val_tb]
return val_list, rate_list, rate_tb_list