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

Python Pandas行合并:为子类别项添加前缀并规整DataFrame

问题

我用pd.read_excel()读取了如下结构的DataFrame:

NAME     Month1   Month2
1                         Mean all  1386.16  1350.02
2                         Mean       NaN      NaN
3                     Subcategory1  1369.18  1288.48
4                    Subcategory2  1271.26  1270.59
5                    Subcategory3  2940.74  3042.16
6                    Subcategory1    NaN      NaN
7                           item1  1326.99  1280.72
8                           item2  1060.62  1053.34
9                           item3  4189.45  4280.25
10                          item4  1214.41  1213.15
11                  Subactegory2      NaN      NaN
12                         item1  1326.99  1280.72
13                          item2  1060.62  1053.34
14                          item3  4189.45  4280.25
15                          item4  1214.41  1213.15
16                   Subcategory3    NaN      NaN
17                          item1  1326.99  1280.72
18                          item2  1060.62  1053.34
19                          item3  4189.45  4280.25  

希望将子类别字符串添加到其下方对应项的名称中,最终得到如下规整后的DataFrame:

NAME        Month1   Month2
1                         Mean all      1386.16  1350.02
2                    Mean Subcategory1  1369.18  1288.48
3                    Mean Subcategory2  1271.26  1270.59
4                    Mean Subcategory3  2940.74  3042.16
5                   Subcategory1 item1  1326.99  1280.72
6                   Subcategory1 item2  1060.62  1053.34
7                   Subcategory1 item3  4189.45  4280.25
8                   Subcategory1 item4  1214.41  1213.15
9                   Subcategory2 item1  1326.99  1280.72
10                  Subcategory2 item2  1060.62  1053.34
11                  Subcategory2 item3  4189.45  4280.25
12                  Subcategory2 item4  1214.41  1213.15
13                  Subcategory3 item1  1326.99  1280.72
14                  Subcategory3 item2  1060.62  1053.34
15                  Subcategory3 item3  4189.45  4280.25
解决方案

可以通过以下步骤实现数据规整:

步骤1:处理均值行的命名

先把原始DataFrame中Subcategory的均值行(第3-5行)的NAME字段修改为Mean + 子类别名称:

import pandas as pd

# 假设df是读取后的DataFrame
df.loc[df['NAME'].str.startswith('Subcategory') & df['Month1'].notna(), 'NAME'] = 'Mean ' + df['NAME']

步骤2:标记并填充子类别到对应item行

针对那些NAME为Subcategory且Month列为空的行,创建辅助列并向下填充子类别名称到下面的item行:

# 创建子类别辅助列,标记子类别行
df['subcategory'] = df['NAME'].where(df['NAME'].str.startswith('Subcategory') & df['Month1'].isna())
# 向下填充子类别名称到后续行
df['subcategory'] = df['subcategory'].ffill()

步骤3:合并子类别与item名称,过滤无效行

把subcategory列和item的NAME合并,同时过滤掉不需要的行(单独的"Mean"行、原始的子类别空行):

# 对item行合并名称
mask_item = df['NAME'].str.startswith('item')
df.loc[mask_item, 'NAME'] = df['subcategory'] + ' ' + df['NAME']

# 过滤掉无效行:单独的Mean行、子类别空行
df_clean = df[~((df['NAME'] == 'Mean') | (df['NAME'].str.startswith('Subcategory') & df['Month1'].isna()))].copy()

步骤4:重置索引

最后重置索引,让结果和期望格式一致:

df_clean = df_clean.reset_index(drop=True)
# 调整索引从1开始(可选,和示例格式匹配)
df_clean.index = df_clean.index + 1

执行完以上步骤后,就能得到你需要的规整后DataFrame。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:30:53