如何用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
相关产品推荐
相关产品推荐

