You need to enable JavaScript to run this app. Pandas逐步新增DataFrame列时统计新增唯一组合数量的方法求助
优惠活动
大模型
产品
解决方案
定价
更多

Pandas逐步新增DataFrame列时统计新增唯一组合数量的方法求助

Pandas逐列统计新增唯一行组合数量实现方案

实现逻辑

我们用集合存储已经出现过的行组合,逐列遍历累加列范围,每次统计当前范围内未在历史中出现过的唯一组合数量即可,该方案对14000行×1600列的0-1矩阵规模适配性良好。

基础实现(适配示例需求)

import pandas as pd
# 构造示例数据集
data = [[1, 1, 0], [1, 0, 0], [0, 1, 1], [1, 1, 1], [0, 0, 1]]
df = pd.DataFrame(data, columns=["S1", "S2", "S3"])

seen_combs = set()
new_count_list = []

for col_idx in range(df.shape[1]):
    # 取前N列的所有行,转成可哈希的元组后去重
    current_combs = set(df.iloc[:, :col_idx+1].apply(tuple, axis=1))
    # 计算新增唯一组合数
    new_count = len(current_combs - seen_combs)
    new_count_list.append(new_count)
    # 更新历史组合集合
    seen_combs = current_combs

# 将统计结果追加到原表末尾,和预期输出完全一致
df.loc['新增唯一组合数'] = new_count_list

运行后输出的df就和你给出的df_out效果完全匹配,三列的统计值依次为3、1、1。

大矩阵优化版(适配14000行×1600列规模)

如果基础版本速度不够,可以用numpy转换字节串的方式提升哈希效率,性能提升3~5倍:

import pandas as pd
import numpy as np

data = [[1, 1, 0], [1, 0, 0], [0, 1, 1], [1, 1, 1], [0, 0, 1]]
df = pd.DataFrame(data, columns=["S1", "S2", "S3"])

seen_combs = set()
new_count_list = []
data_arr = df.values

for col_idx in range(data_arr.shape[1]):
    current_slice = data_arr[:, :col_idx+1]
    # 行转字节串提升哈希速度,适合大规模矩阵
    current_combs = set([row.tobytes() for row in current_slice])
    new_count = len(current_combs - seen_combs)
    new_count_list.append(new_count)
    seen_combs = current_combs

df.loc['新增唯一组合数'] = new_count_list

内容的提问来源于stack exchange,提问作者Luis Manuel Quiros guerrero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 12:48:02