如何遍历Pandas透视表生成字典列表:提取索引与列值
解决Pandas透视表转换为指定字典列表格式的问题
需求说明
给定如下Pandas透视表,需要提取每一列中device_category(设备类别)与对应数值,生成指定结构的字典列表:
原始透视表
import pandas as pd # 构造示例透视表数据 data = { 'engaged_sessions': [7765, 388, 2, 87], 'event_count': [51325, 4349, 38, 111], 'new_users': [6593, 795, 1, 37], 'total_revenue': [9, 0, 250, 0], 'total_users': [8021, 412, 9, 97] } df = pd.DataFrame(data, index=['Desktop', 'Mobile', 'Smart Tv', 'Tablet']) df.index.name = 'device_category'
透视表结构:
engaged_sessions event_count new_users total_revenue total_users device_category Desktop 7765 51325 6593 9 8021 Mobile 388 4349 795 0 412 Smart Tv 2 38 1 250 9 Tablet 87 111 37 0 97
期望输出格式
series: [{ name: 'engaged_sessions', data: [{ name: 'Desktop', y: 7765, }, { name: 'Mobile', y: 388 }, ...] }, { name: 'event_count', data: [{ name: 'Desktop', y: 51325, }, { name: 'Mobile', y: 4349 }, ...] }, ...]
解决方案
直接遍历透视表的每一列,对列内的每个设备类别和对应值生成字典,再组合成目标结构:
series = [] # 遍历每一列 for col_name in df.columns: # 生成当前列的data列表:每个元素是{name: 设备类别, y: 对应数值} data_items = [{"name": device, "y": value} for device, value in df[col_name].items()] # 将列名和data列表组合成字典,加入series series.append({"name": col_name, "data": data_items})
代码说明
df.columns获取所有统计指标列名,对应输出里的name字段df[col_name].items()遍历当前列的索引(设备类别)和对应数值,生成data列表中的每个字典- 最终
series变量完全符合期望的结构,可直接用于后续业务场景(比如可视化配置)
为什么之前的方法效果不佳?
to_dict()默认生成的是{列名: {设备: 数值}}的嵌套字典,需要额外转换才能匹配目标格式groupby是按行维度分组,而需求是按列维度提取数据,方向不对,所以无法得到目标结果
内容的提问来源于stack exchange,提问作者lss555
相关产品推荐
相关产品推荐

