如何获取DataFrame名称为字符串并正确匹配筛选后的对应实例
解决方案
问题核心是筛选时仅对DataFrame列表做了过滤,未同步过滤对应的名称列表,导致索引错位,以下是几种常用的可落地实现方案:
方案1:筛选时同步保留数据与名称的配对关系
不需要修改原有数据结构,仅调整筛选逻辑,同时遍历DataFrame列表和名称列表,符合条件的配对同步保留:
# 假设你原有的筛选判断逻辑为自定义函数 is_covered(df),返回True/False # 旧筛选写法(仅保留DataFrame): # covered_filts = [df for df in filters if is_covered(df)] # 新筛选写法(同步保留DataFrame和对应名称) covered_pairs = [(df, name) for df, name in zip(filters, filter_names) if is_covered(df)]
绘图时直接遍历配对结果即可,不会出现错位:
for df, name in covered_pairs: plt.plot(phases, ind_int_flux, label = name)
如果需要单独拆分筛选后的DataFrame列表和名称列表,也可以额外加两行:
covered_filts = [pair[0] for pair in covered_pairs] covered_filter_names = [pair[1] for pair in covered_pairs]
方案2:给DataFrame绑定名称属性
直接将名称和DataFrame绑定为一个整体,后续不需要维护两份独立列表:
# 初始化时给每个DataFrame添加自定义name属性 for df, name in zip(filters, filter_names): df.name = name # 筛选时正常过滤DataFrame即可 covered_filts = [df for df in filters if is_covered(df)] # 绘图时直接取每个DataFrame的name属性当标签 for df in covered_filts: plt.plot(phases, ind_int_flux, label = df.name)
方案3:用字典存储映射关系
如果滤波器名称唯一,用字典存储名称和DataFrame的对应关系逻辑更清晰:
# 初始化字典,键为滤波名称,值为对应DataFrame filter_dict = dict(zip(filter_names, filters)) # 筛选时保留符合条件的键值对 covered_filter_dict = {name: df for name, df in filter_dict.items() if is_covered(df)} # 绘图时遍历字典即可 for name, df in covered_filter_dict.items(): plt.plot(phases, ind_int_flux, label = name)
内容的提问来源于stack exchange,提问作者user16936122
相关产品推荐
相关产品推荐

