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

Pandas DataFrame中与首列等值的列组合出现频次统计

等值列组合频次统计实现方案

核心逻辑

  • 以每行首列的值为基准,筛选当前行中所有取值等于该基准值的列
  • 按原列顺序将匹配到的列名拼接为组合标识,避免同组组合因列序错乱导致统计失真
  • 对所有行生成的组合标识做频次计数,整理为指定的两列表格
  • 全程无硬编码的列名/行列尺寸限制,可直接适配任意结构的同类DataFrame

完整可运行代码

import pandas as pd

# 构造题目示例DataFrame
df1 = pd.DataFrame(
    {
        "DK1": [10, 15, 15, 10, 10],
        "DK2": [10, 10, 15, 10, 10],
        "NO1": [12, 15, 15, 12, 10],
        "NO2": [15, 10, 15, 15, 10],
        "NO3": [15, 10, 15, 15, 15],
        "NO4": [10, 10, 15, 10, 15],
    }
)

def generate_row_combo(row):
    base_val = row.iloc[0]
    matched_cols = row[row == base_val].index.tolist()
    return "-".join(matched_cols)

# 逐行生成组合标识
combo_list = df1.apply(generate_row_combo, axis=1)

# 统计频次并整理格式
result = (
    combo_list.value_counts()
    .rename_axis("Combo")
    .reset_index(name="Occurrence")
)

运行结果校验

执行上述代码后输出的结果与题目期望完全一致:

Combo  Occurrence
0          DK1-DK2-NO4           2
1  DK1-DK2-NO1-NO2-NO3-NO4           1
2              DK1-NO1           1
3      DK1-DK2-NO1-NO2           1

实现注意事项

  • 取基准值时优先用位置索引row.iloc[0]获取首列,不要硬编码固定列名,避免列名变更时逻辑失效
  • 匹配列时直接通过row == 基准值筛选结果,返回的索引顺序和原DataFrame列顺序完全一致,拼接后不会出现同组组合字符串不一致的问题
  • 整个逻辑没有绑定固定的行列数量,哪怕DataFrame后续增加列、增加行数,代码不需要修改即可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 19:15:03