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

Pandas查找满足多条件的最小索引实现指定和的数值配对分组

Pandas DataFrame 配对分组实现方案

核心实现逻辑

  • 遍历所有未分组的行,计算当前数值的补数(目标和6减去当前值)
  • 筛选待配对行规则:未分组、数值等于补数、索引不等于当前行索引(避免自配对)
  • 先判断筛选结果是否为空,为空直接跳过,完全避免无匹配时的索引取值报错
  • 找到符合条件的最小索引后,同时给两行标记分组状态和配对索引

完整可运行代码

import pandas as pd

# 可配置目标和
TARGET_SUM = 6

# ------------------- 示例1输入 -------------------
df_1 = pd.DataFrame({
    'Rest_after_division': [1,3,3,4,5,5,1],
    'Grouped_with_index': ["-","-","-","-","-","-","-"],
    'Grouped': [0,0,0,0,0,0,0]
})

# ------------------- 配对逻辑 -------------------
for idx in df_1.index:
    # 跳过已分组行
    if df_1.at[idx, 'Grouped'] == 1:
        continue
    current_val = df_1.at[idx, 'Rest_after_division']
    target_val = TARGET_SUM - current_val
    
    # 筛选符合条件的配对候选
    candidate = df_1[
        (df_1['Grouped'] == 0) & 
        (df_1['Rest_after_division'] == target_val) &
        (df_1.index != idx)
    ]
    # 无候选直接跳过,避免报错
    if candidate.empty:
        continue
    
    # 取最小的候选索引
    buddy_idx = candidate.index.min()
    
    # 标记配对信息
    df_1.at[idx, 'Grouped'] = 1
    df_1.at[idx, 'Grouped_with_index'] = str(buddy_idx)
    df_1.at[buddy_idx, 'Grouped'] = 1
    df_1.at[buddy_idx, 'Grouped_with_index'] = str(idx)

# 查看结果
print(df_1)

测试用例验证

示例2(3个1和3个5)输入

df_2 = pd.DataFrame({
    'Rest_after_division': [1,1,1,5,5,5],
    'Grouped_with_index': ["-","-","-","-","-","-"],
    'Grouped': [0,0,0,0,0,0]
})

运行上述配对逻辑后,会自动完成三对配对:0↔3、1↔4、2↔5,符合两两配对需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:00:02