如何使用Pandas计算2020年上下半年客户消费金额的增减情况
Pandas快速计算客户上下半年消费增减幅度实现方案
核心思路为「数据清洗→周期标签标记→分组聚合→行列转换→增幅计算」,仅需数行代码即可完成需求,具体实现如下:
完整实现代码
1. 导入依赖并构造示例数据
import pandas as pd # 构造示例数据 data = { "Customer": ["A", "B", "A", "A", "A", "B", "C"], "Date (YYYYMM)": [202001, 202001, 202002, 202003, 202004, 202002, 202001], "Spend": ["$200", "$400", "$500", "$200", "$700", "$100", "$50"] } df = pd.DataFrame(data)
2. 数据预处理
# 去掉消费金额的$符号,转换为数值类型 df["Spend"] = df["Spend"].str.replace("$", "", regex=False).astype(int) # 筛选2020年全年数据,给每条数据打上半年/下半年标签 # h1代表2020年上半年,h2代表2020年下半年 df = df[df["Date (YYYYMM)"].between(202001, 202012)].copy() df["period"] = df["Date (YYYYMM)"].apply(lambda x: "h1" if x <= 202006 else "h2")
3. 聚合各客户各周期消费总额
# 按客户+周期分组求和,转为宽表格式,缺失的周期消费额默认填0 period_spend = df.groupby(["Customer", "period"])["Spend"].sum().unstack(fill_value=0)
4. 计算消费增减幅度
# 计算增幅百分比,保留2位小数,同时处理上半年消费为0的除零异常 period_spend["increase_rate(%)"] = period_spend.apply( lambda x: round((x["h2"] - x["h1"])/x["h1"] * 100, 2) if x["h1"] != 0 else float("inf") if x["h2"] > 0 else 0, axis=1 )
结果说明
示例数据中所有消费都集中在上半年,因此输出结果如下:
| Customer | h1 | h2 | increase_rate(%) |
|---|---|---|---|
| A | 1600 | 0 | -100.0 |
| B | 500 | 0 | -100.0 |
| C | 50 | 0 | -100.0 |
如果需要关联其他客户属性,对period_spend执行reset_index()后再和原表merge即可。
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

