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

Pandas如何用LIKE筛选多列并保留列的原有关联顺序?

实现方案

问题现状

当前DataFrame列遵循字段类型_序号的命名规则,原始列顺序为:
NAME_1, EMAIL_1, PHONO_1, POSTALCODE_1, NAME_2, EMAIL_2, PHONO_2, POSTALCODE_2, ……
目标是筛选NAME、EMAIL两类列,保持NAME_1, EMAIL_1, NAME_2, EMAIL_2……的相邻配对顺序,后续还要支持按序号拆分关联列为独立DataFrame。

之前尝试的两种方案问题如下:

  • 直接用&拼接两个filter返回值的写法不成立:df.filter(like=xxx)返回的是列名组成的子集,不是逐列的布尔掩码,无法做按位与运算
  • 分类型筛选后横向拼接的方式,会把同类型列连续排列,打乱同序号列的配对顺序,无法满足需求

步骤1:按配对顺序筛选目标列

核心逻辑是先提取所有列的序号后缀,按序号从小到大排序,每个序号下依次取对应NAME、EMAIL列,从根源上保证列顺序符合配对要求,代码如下:

import pandas as pd

# 提取所有列的数字后缀,去重后按数值大小升序排列
col_suffixes = sorted(
    {col.split("_")[-1] for col in df.columns if "_" in col},
    key=lambda x: int(x)
)

# 按序号依次拼接同组的NAME、EMAIL列,生成顺序正确的列名列表
target_columns = []
for suf in col_suffixes:
    target_columns += [f"NAME_{suf}", f"EMAIL_{suf}"]

# 直接按列名列表取数,得到顺序符合要求的结果
df_pair = df[target_columns]

运行后df_pair的列顺序就是预期的NAME_1, EMAIL_1, NAME_2, EMAIL_2……。


步骤2:按序号拆分关联列为独立DataFrame

基于前面提取好的col_suffixes,直接循环遍历即可拆分出每个序号对应的独立DataFrame,支持按需保留同组其他字段(比如PHONO、POSTALCODE):

# 用字典存储拆分后的子DataFrame,key为序号,value为对应子表
df_dict = {}
for suf in col_suffixes:
    # 列表里可以按需增删需要保留的同组字段
    df_dict[suf] = df[[
        f"NAME_{suf}",
        f"EMAIL_{suf}",
        f"PHONO_{suf}",
        f"POSTALCODE_{suf}"
    ]]

# 调用示例:获取序号1对应的独立DataFrame
df_1 = df_dict["1"]

该方案不依赖原始列的排列顺序,只要列名保持字段名_数字序号的规则,就不会出现列错位、顺序错乱的问题,后续要新增筛选字段只需要往列名列表里加对应前缀即可,维护成本很低。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 11:09:28