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

如何在Pandas中按sl. no列的标题对数据进行分组

用Pandas按sl. No列中的标题分组的方法

你的数据结构里,sl. No列既包含分组标题(如Heading1、Head2),又包含对应分组内的序号行。要实现按这些标题分组,需先给数据行打上分组标签,再进行分组操作,具体步骤如下:

1. 读取数据

先读取CSV/Excel文件,注意保留sl. No列的字符串类型,避免数字序号被自动转换为数值类型,影响后续判断:

import pandas as pd

# 读取CSV文件,指定sl. No列为字符串
df = pd.read_csv('your_data.csv', dtype={'sl. No': str})

# 如果是Excel文件,用下面的代码
# df = pd.read_excel('your_data.xlsx', dtype={'sl. No': str})

2. 标记分组标题并填充分组标签

识别出sl. No列中的标题行,然后将标题向下填充,给每一行数据分配对应的分组标签:

# 方法1:通过判断sl. No是否为数字来标记标题行
df['is_heading'] = ~df['sl. No'].str.isdigit()

# 方法2:通过判断其他数值列是否全为空来标记标题行(更贴合你的数据格式)
# df['is_heading'] = df[['v1','v2','v3','v4']].isna().all(axis=1)

# 将标题向下填充,生成分组标签列
df['group'] = df.loc[df['is_heading'], 'sl. No'].ffill()

3. 过滤有效数据行

过滤掉没有实际数据的标题行,只保留需要分组的有效数据:

# 筛选出非标题行
filtered_df = df[~df['is_heading']].copy()

# 删除临时的is_heading列
filtered_df.drop('is_heading', axis=1, inplace=True)

4. 执行分组操作

现在可以用groupby对group列进行分组,完成各种分析操作:

# 按分组标签分组
grouped_data = filtered_df.groupby('group')

# 示例1:遍历每个分组,查看数据
for group_name, data in grouped_data:
    print(f"=== 分组:{group_name} ===")
    print(data)

# 示例2:计算每个分组的v1列平均值
group_mean = grouped_data['v1'].mean()
print("\n各分组v1列平均值:")
print(group_mean)

# 示例3:将每个分组保存为单独的CSV文件
for group_name, data in grouped_data:
    data.to_csv(f"{group_name}_data.csv", index=False)

内容的提问来源于stack exchange,提问作者Hillal Kumar Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 02:57:54