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

如何按列名前缀列表拆分Pandas DataFrame为多个子数据框

按列名前缀拆分Pandas DataFrame实现方法

需求说明

需要根据列名下划线前的PX前缀,将原始DataFrame拆分为多个独立子DataFrame,每个子DataFrame仅包含对应前缀的所有列。

示例原始数据

构造测试数据代码:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(10, 4)))
df.columns = ['P1_ATGC', 'P1_GCTA', 'P2_AACT', 'P2_CGAT']

原始数据预览:

P1_ATGCP1_GCTAP2_AACTP2_CGAT
078864778
122482243
291124510
38385920
482262571
513365319
693153028
724135523
810499845
985357789

已通过代码获取到唯一前缀集合:

np.unique([x.split('_')[0] for x in df.columns])
# 输出:array(['P1', 'P2'], dtype='<U2')

目标拆分效果:

  • 第1个子表包含所有P1_开头的列
  • 第2个子表包含所有P2_开头的列

实现代码

方式1:输出为列表(和示例中df[0]、df[1]的索引方式完全匹配)

直接遍历前缀,用str.startswith()匹配对应列做筛选即可:

prefixes = np.unique([x.split('_')[0] for x in df.columns])
split_dfs = [df.loc[:, df.columns.str.startswith(p)] for p in prefixes]

调用方式:

  • split_dfs[0]返回P1前缀对应的子DataFrame
  • split_dfs[1]返回P2前缀对应的子DataFrame

方式2:输出为字典(按前缀名索引,更不易出错)

如果后续前缀数量变动,用字典按键取值比列表索引更稳妥:

split_dfs_dict = {p: df.loc[:, df.columns.str.startswith(p)] for p in prefixes}

调用方式:

  • split_dfs_dict['P1']返回P1前缀对应的子DataFrame
  • split_dfs_dict['P2']返回P2前缀对应的子DataFrame

说明:str.startswith()为严格开头匹配,不会出现类似XP1_xxx这类列名被误匹配到P1前缀的问题,比通用字符串包含判断逻辑更严谨。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:21:30