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

两次遍历dataframe生成桑基图数据源,是否有更高效的实现方式?

桑基图数据转换优化方案

核心思路为使用pandas向量化运算替代双层循环,时间复杂度从O(n²)降低至O(n),适合处理大数据量场景。

核心实现逻辑

  1. 按ID字段分组,对flow列执行向下位移操作,直接获取每个节点对应的下一级节点作为初始Destination
  2. 特殊规则处理:将flow为final point c的行的Destination统一替换为end
  3. 空值处理:将每个ID最后一行无下一级节点的Destination填充为空字符串
  4. 字段重命名:将原flow字段重命名为Source

完整代码示例

import pandas as pd

# 原始数据构造(实际使用时替换为你自己的df读取逻辑即可)
data = {
    "ID": [1,1,1,2,2,3,3,3],
    "flow": ["Starting a", "next point b", "final point c", 
             "Starting a", "next point b", 
             "Starting a", "next point b", "final point c"]
}
df = pd.DataFrame(data)

# 核心处理代码
# 若原始数据未按ID+流程顺序排序,先执行排序:df = df.sort_values(["ID", "你的顺序字段名"])
df["Destination"] = df.groupby("ID")["flow"].shift(-1)
df.loc[df["flow"] == "final point c", "Destination"] = "end"
df["Destination"] = df["Destination"].fillna("")
df = df.rename(columns={"flow": "Source"})

# 输出结果验证
print(df)

输出结果匹配要求

IDSourceDestination
1Starting anext point b
1next point bfinal point c
1final point cend
2Starting anext point b
2next point b
3Starting anext point b
3next point bfinal point c
3final point cend

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:04