两种方法求DataFrame指定品牌占比

64 阅读2分钟

方法一:用循环的方法得多个日期的占比

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