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

如何用Python从.xlsx表格中匹配正负数值对并标记关联

解决Excel表格中同一订单下正负数值配对标记问题

核心思路

按N_order分组,每组内先统计每个绝对值对应的正、负数值数量,再逐行检查:只要当前数值的对应符号(正找负,负找正)还有未配对的余量,就标记为linked,每标记一次就减少对应余量的计数,确保仅配对等量的正负值。

实现代码

import pandas as pd

# 读取目标Excel文件(替换成你的文件路径)
df = pd.read_excel('your_file.xlsx')

# 处理每组订单的配对逻辑
def process_order_group(group):
    # 统计每个绝对值的正负数量
    abs_count = {}
    for _, row in group.iterrows():
        val_abs = abs(row['Amount'])
        is_positive = row['Amount'] > 0
        if val_abs not in abs_count:
            abs_count[val_abs] = {'pos': 0, 'neg': 0}
        abs_count[val_abs]['pos' if is_positive else 'neg'] += 1
    
    # 逐行标记配对状态
    linked_status = []
    for _, row in group.iterrows():
        val_abs = abs(row['Amount'])
        is_positive = row['Amount'] > 0
        # 检查是否还有可配对的对应数值
        if is_positive and abs_count[val_abs]['neg'] > 0:
            linked_status.append('linked')
            abs_count[val_abs]['neg'] -= 1
        elif not is_positive and abs_count[val_abs]['pos'] > 0:
            linked_status.append('linked')
            abs_count[val_abs]['pos'] -= 1
        else:
            linked_status.append('')
    group['Linked'] = linked_status
    return group

# 应用分组处理并保存结果
df = df.groupby('N_order', group_keys=False).apply(process_order_group)
df.to_excel('paired_result.xlsx', index=False)

关键说明

  • 先统计后标记的逻辑,避免了同一绝对值下多组重复配对的问题,每配对一组就消耗一次计数,确保正负数值一一对应。
  • 如果表格存在空值,可在读取后添加df = df.dropna(subset=['N_order', 'Amount'])清理无效行。
  • 替换代码中的your_file.xlsx为你的实际文件路径,运行后会生成带有Linked列的结果文件paired_result.xlsx。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:10:31