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

如何按DataFrame首行值拆分生成多个独立子数据框

按DataFrame首行值拆分亚组数据框实现方法

需求说明

需要基于DataFrame第一行的取值拆分数据,生成4个独立的数据框用于亚组分析:

  • 源数据为172×106规格的Excel文件,未设置列表头
  • 第一行取值仅为1、2、3、4,其余171行为影像组学特征
  • 需要将对应列的特征复制到新数据集

数据样例如下:

{0: [4.0, 0.65555056, 0.370511262, 16.5876203, 44.76954415, 48.0, 32.984845, 49.47726751, 49.47726751, 13133.33333, 29.34869973, 0.725907513, 3708.396349, 0.282365204, 13696.0, 2.122884402, 3.039611259, 1419.058749, 1.605529827, 0.488297449], 1: [2.0, 0.82581372, 0.33201741, 20.65753167, 62.21821817, 50.59644256, 62.60990337, 55.56977596, 77.35631842, 23890.66667, 51.38065822, 0.521666786, 7689.706847, 0.321870752, 25152.0, 1.022813615, 1.360453239, 548.2156387, 0.314035581, 0.181204079]}

原有代码报错原因

原实现使用groupby拆分,运行触发KeyError: '1',核心问题有2个:

  1. 第一行的分组值读入后为浮点型(样例中可见为4.0、2.0),代码传入字符串"1"匹配分组,类型不匹配无法找到对应分组
  2. 转置后分组的逻辑未做最终结构还原,即使匹配到分组,得到的也是转置后的结构,和原数据行列逻辑不一致

原有代码如下:

import numpy as np
df = pd.read_excel(r'H:\Documenten\MATLAB\sample_file.xlsx',header=None)
Class_1=df.groupby(df.T.loc[:,0])
df_new = Class_1.get_group("1")
print(df_new) 

报错信息如下:

Traceback (most recent call last):
  File "H:/PycharmProjects/RadiomicsPipeline/spearman_subgroups.py", line 5, in <module>
    df_new = Class_1.get_group("1")
  File "C:\Users\cpullen\AppData\Roaming\Python\Python37\site-packages\pandas\core\groupby\groupby.py", line 754, in get_group
    raise KeyError(name)
KeyError: '1'

正确实现方案

方案1:直接按列筛选(逻辑最简单,推荐)

不需要调用groupby,直接提取第一行作为分组标签,按标签筛选对应列即可:

import pandas as pd
# 读取无表头Excel数据
df = pd.read_excel(r'H:\Documenten\MATLAB\sample_file.xlsx', header=None)
# 提取第一行作为分组标签
group_tags = df.iloc[0, :]
# 拆分得到4个亚组数据框,默认保留首行分组标签
df_group1 = df.loc[:, group_tags == 1.0]
df_group2 = df.loc[:, group_tags == 2.0]
df_group3 = df.loc[:, group_tags == 3.0]
df_group4 = df.loc[:, group_tags == 4.0]
# 如果不需要首行标签,只保留特征行,替换为以下写法
# df_group1 = df.loc[:, group_tags == 1.0].iloc[1:, :]

方案2:修正groupby逻辑

如果需要沿用groupby写法,修正匹配类型和转置逻辑即可:

import pandas as pd
df = pd.read_excel(r'H:\Documenten\MATLAB\sample_file.xlsx', header=None)
# 转置后按首行整数值分组,分组完成后转置回原行列结构
grouped = df.T.groupby(df.iloc[0, :].astype(int))
df_group1 = grouped.get_group(1).T
df_group2 = grouped.get_group(2).T
df_group3 = grouped.get_group(3).T
df_group4 = grouped.get_group(4).T

注意:分组匹配时必须保证传入的键类型和分组标签类型一致,要么直接匹配浮点型数值1.0,要么先把标签转为整数型再匹配整数1,禁止用字符串"1"匹配数值型标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:27:23