基于另一DataFrame分组条件筛选Pandas DataFrame行
解决方法
要实现按分组最值筛选数据的需求,你可以通过表关联+条件筛选的方式快速完成,步骤如下:
步骤1:关联两个DataFrame
先把data和boundary按Name字段做左连接,这样data里的每一行都会带上对应Name的Min和Max阈值:
merged_df = data.merge(boundary, on='Name', how='left')
步骤2:按条件筛选行
直接筛选出Salary低于对应Min或高于对应Max的行:
filtered_df = merged_df[(merged_df['Salary'] < merged_df['Min']) | (merged_df['Salary'] > merged_df['Max'])]
步骤3:保留需要的列
最后只保留Name和Salary列,得到目标结果:
result = filtered_df[['Name', 'Salary']] print(result)
运行后输出的结果就是你期望的:
Name Salary 0 John 18000 2 Sam 15000 3 Sam 35000
另一种实现方式(无需合并表)
如果不想生成中间合并表,也可以把boundary转成字典,用map给data添加阈值列,再筛选:
# 把boundary转成Name对应Min/Max的字典 min_map = boundary.set_index('Name')['Min'].to_dict() max_map = boundary.set_index('Name')['Max'].to_dict() # 给data添加对应阈值列 data['Min'] = data['Name'].map(min_map) data['Max'] = data['Name'].map(max_map) # 筛选并保留目标列 result = data[(data['Salary'] < data['Min']) | (data['Salary'] > data['Max'])][['Name', 'Salary']]
内容的提问来源于stack exchange,提问作者Trizzy
相关产品推荐
相关产品推荐

