如何基于行索引拆分含表头行的DataFrame为多个子块
按以">"开头的独立表头行拆分DataFrame
需求说明
需将包含独立表头行(行首元素以">"开头)的DataFrame拆分为多个子块,每个子块包含一个表头行及其后续的数值矩阵,直至下一个表头行出现。
输入示例
1 >904 5.000000e+00 <NA> <NA> 2 0.00961538461538 9.615385e-03 9.615385e-03 9.711538e-01 3 0.00961538461538 9.615385e-03 9.711538e-01 9.615385e-03 4 0.00961538461538 9.615385e-03 9.711538e-01 9.615385e-03 5 0.00961538461538 9.615385e-03 9.711538e-01 9.615385e-03 6 0.971153846154 9.615385e-03 9.615385e-03 9.615385e-03 7 >s36 7.000000e+00 <NA> <NA> 8 0.844325153374 7.668712e-04 1.541411e-01 7.668712e-04 9 0.0774539877301 6.909509e-01 7.745399e-02 1.541411e-01 10 0.000766871165644 7.745399e-02 1.541411e-01 7.676380e-01 11 0.76763803681 7.745399e-02 7.668712e-04 1.541411e-01 12 0.0774539877301 7.745399e-02 7.676380e-01 7.745399e-02 13 0.230828220859 6.142638e-01 7.745399e-02 7.745399e-02 14 0.460889570552 2.308282e-01 1.541411e-01 1.541411e-01
期望输出
$0 1 >904 5.000000e+00 <NA> <NA> 2 0.00961538461538 9.615385e-03 9.615385e-03 9.711538e-01 3 0.00961538461538 9.615385e-03 9.711538e-01 9.615385e-03 4 0.00961538461538 9.615385e-03 9.711538e-01 9.615385e-03 5 0.00961538461538 9.615385e-03 9.711538e-01 9.615385e-03 6 0.971153846154 9.615385e-03 9.615385e-03 9.615385e-03 $1 7 >s36 7.000000e+00 <NA> <NA> 8 0.844325153374 7.668712e-04 1.541411e-01 7.668712e-04 9 0.0774539877301 6.909509e-01 7.745399e-02 1.541411e-01 10 0.000766871165644 7.745399e-02 1.541411e-01 7.676380e-01 11 0.76763803681 7.745399e-02 7.668712e-04 1.541411e-01 12 0.0774539877301 7.745399e-02 7.676380e-01 7.745399e-02 13 0.230828220859 6.142638e-01 7.745399e-02 7.745399e-02 14 0.460889570552 2.308282e-01 1.541411e-01 1.541411e-01
解决方案
Python(Pandas)实现
通过识别表头行、生成分组ID,再按分组拆分:
import pandas as pd # 假设数据已加载为DataFrame df,第一列名为col0 # 标记所有表头行 header_mask = df['col0'].str.startswith('>') # 生成每个行对应的分组ID df['group_id'] = header_mask.cumsum() - 1 # 按分组ID拆分DataFrame为列表 split_result = [group.drop('group_id', axis=1) for _, group in df.groupby('group_id')]
拆分后split_result中的每个元素就是对应表头下的子DataFrame。
R语言实现
利用正则匹配识别表头行,通过累计求和生成分组,再拆分数据框:
# 假设数据已加载为数据框 df # 匹配以">"开头的表头行 header_mask <- grepl("^>", df[, 1]) # 生成分组ID group_id <- cumsum(header_mask) # 按分组拆分数据框为列表 split_result <- split(df, group_id)
split_result即为符合要求的子数据框列表,格式与示例输出一致。
内容的提问来源于stack exchange,提问作者Mauricio Oliveira
相关产品推荐
相关产品推荐

