You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame按条件提取对应列值生成字典列表实现方案咨询

Pandas分类列筛选生成字典列表最优实现方案

实现思路

你遍历_C列的逻辑是对的,相比逐行遍历全表的方案,定向处理分组列的效率更高。我们可以基于Pandas向量化操作进一步优化,避免不必要的全表遍历,同时兼容任意数量的分组列。

核心实现代码

import pandas as pd

# 假设df为你的原始DataFrame
result = []
# 筛选所有_C结尾的分组列
c_columns = [col for col in df.columns if col.endswith("_C")]

for c_col in c_columns:
    # 匹配同组对应的_B列
    b_col = c_col.replace("_C", "_B")
    # 向量化筛选C列值处于30~90区间的行
    valid_mask = df[c_col].between(30, 90, inclusive="both")
    # 提取符合条件的C、B值生成单键字典加入结果列表
    for c_val, b_val in zip(df.loc[valid_mask, c_col], df.loc[valid_mask, b_col]):
        result.append({c_val: b_val})

方案说明

  • 适配任意数量的分组,只要列名符合{分组编号}_A/{分组编号}_B/{分组编号}_C的命名规则即可自动识别处理
  • 筛选逻辑使用Pandas原生向量化操作,仅遍历符合条件的少量数据,数据量越大性能优势越明显
  • 自动忽略_C列的空值和区间外的值,不需要额外判空处理
  • 运行结果和你给出的示例输出完全匹配:[{85.5 : 3.3}, {85 : 3.3}, {89 : 2.8}, {80 : 3}, {70 : 3.1}, {60: 4}]

性能优化可选方案

如果你的数据量超过10万行,可以用列表推导式替换内部循环进一步提速:

result = []
for c_col in [col for col in df.columns if col.endswith("_C")]:
    b_col = c_col.replace("_C", "_B")
    valid_df = df.loc[df[c_col].between(30,90), [c_col, b_col]]
    result.extend([{c: b} for c, b in valid_df.to_numpy()])

内容的提问来源于stack exchange,提问作者asimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:06:03