Pandas实现忽略行内元素顺序的组合频次统计
需求描述
统计数据表中同类记录的出现频次,判定同类的规则为:不考虑行内元素的排列顺序,只要元素组成完全一致就算同一类。
示例
输入数据
输入DataFrame结构如下:
df: Col1 A;B;C C;B;A A;D A;C;B D;A D;C
预期输出
分类统计后的结果如下:
df_result: Col freq A;B;C 3 A;D 2 D;C 1
分类逻辑说明
A;B;C、C;B;A、A;C;B三个值拆分后元素均为A、B、C,仅排列顺序不同,归为A;B;C类,统计频次为3A;D、D;A拆分后元素均为A、D,归为A;D类,统计频次为2D;C无其他元素组成相同的记录,单独为一类,统计频次为1
实现代码(pandas环境)
核心逻辑:对每行的字符串按分隔符拆分后,将元素做统一排序,再拼接成标准格式的字符串,以此为分组依据做频次统计即可。
import pandas as pd # 1. 构造示例数据 df = pd.DataFrame({ 'Col1': ['A;B;C', 'C;B;A', 'A;D', 'A;C;B', 'D;A', 'D;C'] }) # 2. 生成统一标准的分类键:拆分→排序→拼接 df['std_key'] = df['Col1'].apply(lambda s: ';'.join(sorted(s.split(';')))) # 3. 分组计数,整理成目标格式 df_result = df['std_key'].value_counts().reset_index() df_result.columns = ['Col', 'freq']
运行上述代码后得到的df_result与预期输出完全一致。如果需要调整分类后的展示格式,只需要修改排序、拼接的规则即可。
内容的提问来源于stack exchange,提问作者Cina
相关产品推荐
相关产品推荐

