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

如何将字典中各列表的每个值存入独立列?用于桑基图分析

实现用户点击行为的列格式转换(用于桑基图分析)

原始数据

用户拥有如下结构的字典,键为用户标识,对应值为点击行为列表:

my_dict = {
    1: ['Home', 'Stories'],
    2: ['Sounds', 'Stories', 'Home', 'Home', 'Stories'],
    3: ['Journeys', 'Journeys', 'Journeys '],
    4: ['Home', 'Home', 'Home'],
    5: ['Home', 'Stories', 'Home', 'Home', 'Cancellation Flow'],
    6: ['My Account', 'My Account']
}

需求

需要将每个用户的点击行为列表拆分为独立列,输出如下格式的结构化数据(用于制作桑基图分析用户点击决策组合):

User       1                  2                  3               4        5
1          'Home'            'Stories'
2          'Sounds'          'Stories'          'Home'          'Home'   'Stories'
3          'Journeys'        'Journeys'         'Journeys'
4          'Home'            'Home'             'Home'
5          'Home'            'Stories'          'Home'          'Home'   'Cancellation Flow'
6          'My Account'      'My Account'

实现方法

方法一:使用Pandas(推荐,适配后续桑基图数据处理)

Pandas可快速将字典转换为结构化DataFrame,自动补全缺失值,最后格式化输出:

import pandas as pd

# 将字典转为DataFrame,用户ID作为索引
df = pd.DataFrame.from_dict(my_dict, orient='index')
# 重命名列,从1开始编号
df.columns = [str(i) for i in range(1, len(df.columns)+1)]
# 添加User列,将索引转为列
df.reset_index(inplace=True)
df.rename(columns={'index': 'User'}, inplace=True)

# 格式化输出,设置列宽与对齐方式
print(df.to_string(na_rep='', col_space=[8, 18, 18, 18, 10, 25], justify='left'))

生成的DataFrame可直接作为桑基图的数据源(比如用plotly或matplotlib绘图时,可直接调用列数据)。

方法二:纯Python实现(手动控制格式)

无需第三方库时,可通过字符串对齐手动生成目标格式:

# 确定最长点击列表的长度,以此设置总列数
max_len = max(len(lst) for lst in my_dict.values())
# 定义表头:User + 1到max_len的序号
headers = ['User'] + [str(i) for i in range(1, max_len+1)]
# 定义每列宽度(可根据内容调整)
col_widths = [8, 18, 18, 18, 10, 25]

# 打印表头
header_line = ''.join(f'{header:<{col_widths[i]}}' for i, header in enumerate(headers))
print(header_line)

# 逐行打印用户数据
for user_id, clicks in my_dict.items():
    # 给点击行为添加引号,不足的列补空字符串
    row_data = [str(user_id)] + [f"'{click}'" for click in clicks] + ['']*(max_len - len(clicks))
    # 格式化每行内容
    row_line = ''.join(f'{data:<{col_widths[i]}}' for i, data in enumerate(row_data))
    print(row_line)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:02:38