You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何循环拆分DataFrame分组并对每组执行计算及绘图操作?

问题修复方案

错误点说明

  • 缩进错误:Python 要求 for 循环内部的代码必须统一缩进4个空格,你当前循环体的代码完全没有缩进,直接触发IndentationError
  • 冗余筛选逻辑:df.groupby('Segment')迭代返回的第二个参数就是对应分组的子DataFrame,不需要再次做全表筛选
  • 参数错误:color='key'属于错误写法,你需要为不同分组匹配对应颜色
  • 逻辑错误:plt.show()放在循环内部会每个分组生成一张独立图表,放在循环外才能将所有折线合并到同一张图
  • 字段笔误:你统计的累计列名为user,绘图时误用了不存在的conv字段

修改后可运行代码

import pandas as pd
import matplotlib.pyplot as plt

# 自定义各Segment对应的颜色,可按实际需求扩展
color_config = {
    "A": "red",
    "B": "blue",
    "C": "green"
}

# 遍历分组结果
for seg_name, seg_data in df.groupby("Segment"):
    # 计算天数差
    seg_data["days"] = (seg_data["first"] - seg_data["last"]).dt.days
    # 筛选0~30天的有效数据
    valid_data = seg_data[(seg_data["days"] >= 0) & (seg_data["days"] <= 30)]
    # 按天统计唯一用户数并计算累计值
    stat_result = valid_data.groupby("days")["user"].nunique().reset_index()
    stat_result["cum_user"] = stat_result["user"].cumsum()
    # 绘制折线
    plt.plot(
        stat_result["days"], 
        stat_result["cum_user"], 
        color=color_config.get(seg_name), 
        label=seg_name
    )

# 统一配置图表样式
plt.legend()
plt.xlabel("days")
plt.ylabel("累计用户数")
plt.show()

如果你无法提前枚举所有Segment值,不需要配置color_config,删除绘图时的color参数即可,matplotlib会自动为每个分组分配差异化的颜色。

内容的提问来源于stack exchange,提问作者Abhishek Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:51:00