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

如何基于行索引拆分含表头行的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:09:18