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

Pandas如何对多列逗号分隔的多选值进行组合分组计数

Pandas多选逗号分隔列跨列组合频次统计高效方案

实现思路

  • 先将每个多选列的逗号分隔字符串转换为列表格式
  • 调用pandas原生向量化方法explode将列表拆分为独立行,自动保留同一条记录不同列取值的对应关系
  • 对拆分完成的数据集直接做分组统计,即可得到所有非零值的组合频次
  • 如需补全零计数的全分类组合,通过元数据生成多列分类的笛卡尔积后做重索引即可,全程无需遍历分类编码,性能远高于手动循环实现,可轻松支持单列数百个分类的2-3列组合统计

完整代码实现

首先导入依赖库,构造示例数据:

import pandas as pd
import numpy as np

# 原始示例数据
df = pd.DataFrame(np.array([["1,3","1"],["3","1,2"],["1,3,2","1"],["3,1","2,1"]]),
                  columns=['a', 'b'])
# 分类元数据示例
df_meta = {
    'a': {'Categories': ['1', '2', '3','4']},
    'b': {'Categories': ['1', '2']}
}

核心处理逻辑:

# 1. 将所有多选列的字符串转为列表
target_cols = ['a', 'b']  # 要统计的多选列,可按需修改
for col in target_cols:
    df[col] = df[col].str.split(',')

# 2. 逐列拆分为多行,保留行关联
df_exploded = df
for col in target_cols:
    df_exploded = df_exploded.explode(col)

# 3. 分组统计非零组合的频次
count_result = df_exploded.groupby(target_cols).size().rename('count').reset_index()

# 4. (可选)补全所有零计数的分类组合
all_cates = [df_meta[col]['Categories'] for col in target_cols]
full_index = pd.MultiIndex.from_product(all_cates, names=target_cols)
full_count_result = df_exploded.groupby(target_cols).size()\
                               .reindex(full_index, fill_value=0)\
                               .rename('count')\
                               .reset_index()

输出说明

  • 若只需要非零计数结果,直接使用count_result即可,其计算量仅和原始数据量相关,和分类总数无关,性能最优
  • 若需要包含零计数的全量组合,使用full_count_result,2个各400分类的变量全组合仅16万行,3个各100分类的变量全组合仅100万行,常规算力下均可轻松处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:48:05