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
相关产品推荐
相关产品推荐

