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

如何对含字符串的Pandas DataFrame应用优化算法实现最大多样性选择?

解决Pandas DataFrame每行选元素最大化多样性问题

要实现每行选一个元素让整体多样性最大化,核心是让选中的元素集合唯一值数量尽可能多。针对字符串类型的数据,可按以下方案操作:

1. 先清理无效值

观察数据里的"0"属于非有效聚类标签,先替换为NaN避免选中:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'code': [5,6,7,8,9],
    'clus_0': ['AASP_2', 'AASP_2', 'BBOP_2', 'DGSP_1', 'DDTR_1'],
    'clus_1': ['CCOD_1', 'EXTR_1', 'BBOP_1', 'DVEN_1', 'AASP_4'],
    'clus_2': ['0', 'AASP_2', 'NSRS_1', 'AASP_5', 'AASP_2']
})

# 替换无效值为NaN
df.replace('0', pd.NA, inplace=True)

2. 贪心算法(适合大规模数据)

贪心策略高效且实用:每次优先选当前能新增唯一值的元素,步骤如下:

# 提取所有聚类列
clus_cols = [col for col in df.columns if col.startswith('clus_')]
selected = []
selected_values = set()

for _, row in df.iterrows():
    # 获取当前行的有效候选元素
    candidates = row[clus_cols].dropna().tolist()
    # 评分:未选过的元素得1,重复元素得0
    scores = [1 if val not in selected_values else 0 for val in candidates]
    # 选评分最高的元素(多个最高分可按列优先级选)
    chosen_val = candidates[scores.index(max(scores))]
    selected.append(chosen_val)
    selected_values.add(chosen_val)

# 将结果合并回原DataFrame
df['selected_clus'] = selected

示例运行结果:

code  clus_0  clus_1  clus_2 selected_clus
0     5  AASP_2  CCOD_1    <NA>         CCOD_1
1     6  AASP_2  EXTR_1  AASP_2         EXTR_1
2     7  BBOP_2  BBOP_1  NSRS_1         NSRS_1
3     8  DGSP_1  DVEN_1  AASP_5         DGSP_1
4     9  DDTR_1  AASP_4  AASP_2         DDTR_1

最终选中的元素全为唯一值,多样性达到最大。

3. 全局最优方案(仅适用于小规模数据)

如果行数不多,可通过穷举所有组合找到全局最优,但时间复杂度极高(O(n^k),n为行数,k为每行候选数):

import itertools

# 生成每行的有效候选列表
row_candidates = [row[clus_cols].dropna().tolist() for _, row in df.iterrows()]

max_unique = 0
best_combination = None

# 遍历所有可能的组合
for combo in itertools.product(*row_candidates):
    unique_count = len(set(combo))
    if unique_count > max_unique:
        max_unique = unique_count
        best_combination = combo

df['selected_clus'] = best_combination

自定义调整说明

  • 若需区分元素重复的权重(比如某些标签重复更不可接受),可修改评分函数,给重复元素设负数分。
  • 若有特定优先级的列,可在评分相同的情况下,优先选择列序靠前的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:40:14