Pandas中基于数值趋势过滤行:筛选含多个同正负演变值的记录
pandas 多年度趋势行筛选实现方案
可量化的判定规则
先将筛选要求转化为机器可识别的判断标准,与示例结果完全对齐:
- 逐行遍历所有
Evol_前缀的年度演变值列 - 分别统计该行中大于0的正向值数量、小于0的负向值数量,0值不参与任何方向的计数
- 只要任意一个方向的计数≥2(即存在多个同属性值),就保留该行,其余行过滤
规则匹配度验证:
- Juice Factory行:正向值1个、负向值1个,计数不满足要求,过滤
- Food Factory行:负向值2个,满足保留条件
- Cloth Factory行:正向值1个,其余为0值,计数不满足要求,过滤
代码实现
import pandas as pd # 复现示例原始数据表 df = pd.DataFrame({ "Client": ["Juice Factory", "Food Factory", "Cloth Factory"], "Evol_2019": [0, -1, 2], "Evol_2020": [1, 0, 0], "Evol_2021": [-1, -2, 0] }) # 自动识别所有演变值列,后续新增年度列时无需修改代码逻辑 evol_cols = df.columns[df.columns.str.startswith("Evol_")] # 生成逐行筛选掩码 pos_count = (df[evol_cols] > 0).sum(axis=1) neg_count = (df[evol_cols] < 0).sum(axis=1) keep_condition = (pos_count >= 2) | (neg_count >= 2) # 得到筛选后的结果 filtered_df = df[keep_condition]
灵活调整提示
- 若需要修改“多个同属性值”的判断阈值,比如要求连续3年同方向才保留,只需将判断条件中的
>=2替换为对应阈值即可 - 该逻辑不会将0值误判为正向或负向属性,完全贴合示例中的判断逻辑
内容的提问来源于stack exchange,提问作者Houbi
相关产品推荐
相关产品推荐

