Pandas同列分组条件过滤:筛选成对出现且结果均为正的关联数据
Pandas 关联配对正数筛选实现
实现思路
- 提取配对公共标识:将
item列末尾的_wp后缀去除,得到每对关联条目的唯一分组ID - 按分组ID聚合校验:对每个分组校验两个条目的
result值是否均严格大于0 - 过滤保留符合条件的所有配对条目
完整实现代码
import pandas as pd # 构造示例数据集 data = {'item':['fxr_dl2_rank.r1','fxr_dl2_rank.r2','fxr_dl2_rank.r3', 'fxr_dl2_rank.r4','fxr_dl2_rank.r5', 'fxr_dl2_rank.r1_wp','fxr_dl2_rank.r2_wp','fxr_dl2_rank.r3_wp', 'fxr_dl2_rank.r4_wp','fxr_dl2_rank.r5_wp',], 'result':[-0.15,0.13,-0.29,0.18,-0.18,0.00,0.16,0.15,0.17,-0.17]} df = pd.DataFrame(data) # 步骤1:生成分组ID df['group_id'] = df['item'].str.replace(r'_wp$', '', regex=True) # 步骤2:筛选两个result均为正数的分组 valid_groups = df.groupby('group_id').filter(lambda x: (x['result'] > 0).all())['group_id'].unique() # 步骤3:获取符合条件的所有配对行 result_df = df[df['group_id'].isin(valid_groups)] print(result_df)
输出结果说明
运行后会得到两组符合条件的配对:
fxr_dl2_rank.r2(result=0.13)和fxr_dl2_rank.r2_wp(result=0.16)fxr_dl2_rank.r4(result=0.18)和fxr_dl2_rank.r4_wp(result=0.17)
可选:宽表格式输出
如果需要每一行对应一个配对,可使用透视表转换:
wide_result = df.pivot( index='group_id', columns=df['item'].str.endswith('_wp').map({True: 'wp_result', False: 'normal_result'}), values='result' ).query('normal_result > 0 and wp_result > 0').reset_index() print(wide_result)
内容的提问来源于stack exchange,提问作者ManOnTheMoon
相关产品推荐
相关产品推荐

