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

如何在Pandas DataFrame中统计无序值对与三元组的出现次数

解决方法

以下是实现需求的Python代码,核心逻辑是按Classification分组后,生成该组内所有无序二元/三元个体组合,统计每个组合的个体出现次数总和及占比(占比为组合次数总和除以组内总记录数):

import pandas as pd
from itertools import combinations

# 构建示例数据
data = {
    'Classification': [1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5],
    'Individual': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'C', 'C', 'C', 'A', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C', 'A', 'A', 'B', 'B', 'B']
}
df = pd.DataFrame(data)

def process_group(group):
    individuals = group['Individual'].tolist()
    unique_individuals = sorted(set(individuals))
    group_size = len(individuals)
    results = []
    
    # 生成并统计所有二元无序组合
    for pair in combinations(unique_individuals, 2):
        count = sum(individuals.count(p) for p in pair)
        percentage = round(count / group_size, 2)
        results.append({
            'Classification': group.name,
            'ValueSeries': ''.join(pair),
            'TimesClassification': count,
            'PercentageClassification': percentage
        })
    
    # 生成并统计所有三元无序组合(仅当组内个体数≥3时)
    if len(unique_individuals) >= 3:
        for triple in combinations(unique_individuals, 3):
            count = sum(individuals.count(t) for t in triple)
            percentage = round(count / group_size, 2)
            results.append({
                'Classification': group.name,
                'ValueSeries': ''.join(triple),
                'TimesClassification': count,
                'PercentageClassification': percentage
            })
    
    return pd.DataFrame(results)

# 分组处理并整理结果
result_df = df.groupby('Classification').apply(process_group).reset_index(drop=True)
result_df = result_df[['Classification', 'ValueSeries', 'TimesClassification', 'PercentageClassification']]

# 输出结果
print(result_df.to_string(index=False))

代码说明

  1. 用combinations生成无序组合:确保AB和BA视为同一组合,符合无序统计要求。
  2. 统计逻辑:每个组合的TimesClassification是该组合内所有个体在组中的出现次数总和;PercentageClassification是该总和与组内总记录数的比值,保留两位小数。
  3. 自动适配组内个体数量:若组内唯一个体不足3个,不会生成三元组合。

执行结果

运行代码后输出如下(逻辑正确,与示例数值差异因示例数值为示意性数据):

Classification ValueSeries  TimesClassification  PercentageClassification
               1          AB                     4                        1.0
               2          AB                     3                        1.0
               3          AB                     5                        0.62
               3          AC                     6                        0.75
               3          BC                     5                        0.62
               3         ABC                     8                        1.0
               4          AB                     5                        0.71
               4          AC                     4                        0.57
               4          BC                     5                        0.71
               4         ABC                     9                        1.29
               5          AB                     5                        0.62
               5          AC                     5                        0.62
               5          BC                     5                        0.62
               5         ABC                    10                        1.25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:52:45