如何基于tho_cw_diff最小值及轨位条件筛选并新增列
按规则新增匹配列的实现方案
核心匹配规则
- 规则1(对应ID 1877场景):同一ID分组内,筛选
tho_cw_diff值最小且thor_pos与CW_pos轨位相同的记录,标记为匹配项; - 规则2(对应ID 7931场景):若分组内
tho_cw_diff最小值对应的所有记录轨位均不同,则在同组内查找所有轨位相同的记录中tho_cw_diff最小的项,标记为匹配项; - 规则3(对应ID 8880场景):若同ID分组内所有记录的轨位均不相同,直接选取
tho_cw_diff值最小的记录作为匹配项。
预期输出效果

Python(Pandas)实现代码
import pandas as pd # 假设数据集存储在DataFrame df中,包含列:ID, tho_cw_diff, thor_pos, CW_pos df['is_matched'] = False # 按ID分组处理每条规则 for id_val, group in df.groupby('ID'): min_diff = group['tho_cw_diff'].min() min_diff_rows = group[group['tho_cw_diff'] == min_diff] # 执行规则1:检查最小值子集内是否有轨位相同的记录 same_pos_min = min_diff_rows[min_diff_rows['thor_pos'] == min_diff_rows['CW_pos']] if not same_pos_min.empty: df.loc[same_pos_min.index, 'is_matched'] = True continue # 执行规则2:检查分组内是否存在轨位相同的记录 same_pos_all = group[group['thor_pos'] == group['CW_pos']] if not same_pos_all.empty: min_diff_same_pos = same_pos_all['tho_cw_diff'].min() target_rows = same_pos_all[same_pos_all['tho_cw_diff'] == min_diff_same_pos] df.loc[target_rows.index, 'is_matched'] = True continue # 执行规则3:分组内无轨位相同记录,标记最小值记录 df.loc[min_diff_rows.index, 'is_matched'] = True
内容的提问来源于stack exchange,提问作者money
相关产品推荐
相关产品推荐

