如何在计算时重塑或转置数据集指定列并聚合销售数据?
解决方法:用Pandas实现数据宽格式转换及占比计算
我来帮你搞定这个数据处理需求!你需要把长格式的销售数据,按年份、月份、销售专员分组,同时计算各客户细分的总收入及占比,最终得到每行唯一对应「日期(年+月)+销售专员」的宽格式表。用Python的Pandas库就能轻松实现,具体步骤如下:
步骤1:准备并加载数据
首先修正你提供的CSV格式(原内容里字段和值有连写问题),然后加载为DataFrame:
import pandas as pd # 修正后的原始数据 data = [ [2015, 1, "USA", "Bill", 20, "Enterprise"], [2015, 1, "USA", "Bill", 10, "Enterprise"], [2015, 1, "Germany", "Bill", 5, "Consumer"], [2015, 1, "USA", "Bill", 5, "Enterprise"], [2015, 1, "Germany", "Ted", 5, "Consumer"], [2015, 1, "USA", "Bill", 10, "Consumer"], [2015, 1, "Germany", "Bill", 5, "Consumer"], [2015, 1, "Germany", "Ted", 20, "Enterprise"], [2015, 1, "Germany", "Ted", 20, "Consumer"] ] df = pd.DataFrame(data, columns=["Year", "Month", "Country", "Associate", "Sales Revenue", "Customer Segment"])
步骤2:按维度聚合收入
先按「年份、月份、销售专员、客户细分」分组,计算每个分组的总销售收入:
# 聚合各细分的收入 aggregated = df.groupby(["Year", "Month", "Associate", "Customer Segment"])["Sales Revenue"].sum().reset_index()
步骤3:转换为宽格式
把客户细分转成列,让每行对应「年+月+销售专员」:
# 转宽格式,缺失值填充0 wide_df = aggregated.pivot_table( index=["Year", "Month", "Associate"], columns="Customer Segment", values="Sales Revenue", fill_value=0 ).reset_index()
步骤4:计算总收入及各细分占比
先算出每个销售专员每月的总收入,再计算各细分收入的占比(保留两位小数):
# 计算总收入 wide_df["Total Revenue"] = wide_df["Consumer"] + wide_df["Enterprise"] # 计算占比 wide_df["Consumer %"] = (wide_df["Consumer"] / wide_df["Total Revenue"]).round(2) wide_df["Enterprise %"] = (wide_df["Enterprise"] / wide_df["Total Revenue"]).round(2) # 调整列顺序,匹配你想要的格式 final_df = wide_df[["Year", "Month", "Associate", "Consumer", "Enterprise", "Total Revenue", "Consumer %", "Enterprise %"]]
最终结果
运行后得到的final_df就是你想要的格式,输出如下:
| Year | Month | Associate | Consumer | Enterprise | Total Revenue | Consumer % | Enterprise % |
|---|---|---|---|---|---|---|---|
| 2015 | 1 | Bill | 20 | 35 | 55 | 0.36 | 0.64 |
| 2015 | 1 | Ted | 25 | 20 | 45 | 0.56 | 0.44 |
这样就完全符合你的需求:每行以日期(年+月)和销售专员为唯一标识,同时展示了各客户细分的收入、总收入以及对应占比。
内容的提问来源于stack exchange,提问作者olBc
相关产品推荐
相关产品推荐

