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

Python pandas将Excel多列品牌数据转为交叉表行索引并添加合计列

解决方案

核心思路

你之前直接将品牌多列传入crosstab的index参数无法得到预期结果,是因为原始数据为宽表结构,每一行对应单个受访者,每个品牌列仅存储该受访者是否选中对应品牌的标识,需要先转换为长表结构,过滤出选中的品牌记录后再生成交叉表。

实现步骤

1. 导入依赖并读取数据

import pandas as pd
# 替换为你的Excel文件路径
df = pd.read_excel("调研数据.xlsx")

2. 定义参数并转换数据结构

假设你的数据源包含受访者ID、性别字段,其余多选品牌列名为品牌A、品牌B、品牌C、品牌D,可按需修改对应参数:

# 定义所有品牌列的列名列表
brand_cols = ["品牌A", "品牌B", "品牌C", "品牌D"]
# 宽表转长表,提取品牌选中记录
long_df = df.melt(
    id_vars=["受访者ID", "性别"],
    value_vars=brand_cols,
    var_name="品牌",
    value_name="是否选中"
)
# 过滤出选中的记录,若你的选中标识为"是",可将1改为"是"
long_df = long_df[long_df["是否选中"] == 1]

3. 生成带合计的交叉表

# 生成交叉表,margins参数控制是否添加合计
cross_tab = pd.crosstab(
    index=long_df["品牌"],
    columns=long_df["性别"],
    margins=True,
    margins_name="合计"
)
# 可选:保留所有品牌(含无人选中的品牌,次数填充为0)
cross_tab = cross_tab.reindex(brand_cols + ["合计"]).fillna(0).astype(int)

输出示例

最终生成的交叉表结构如下:

品牌男女合计
品牌A12820
品牌B51520
品牌C91120
品牌D7310
合计333770

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:12:02