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

如何对含两类索引的列进行Pandas透视并重构DataFrame?

解决Pandas按分组标签展开数据的问题

初始数据

你的初始DataFrame如下:

import pandas as pd

df = pd.DataFrame({
    "Row tags": ["4", "100101 - Hospital A.xls", "100195 - Hospital B.xls", "100105 - Hospital C.xls", "5", "100101 - Hospital A.xls", "100195 - Hospital B.xls"],
    "Values": [100, 30, 30, 40, 50, 25, 25]
})

已完成的步骤

你已经通过正则识别出两类行,生成了带Regex pattern列的中间表:

# 生成Regex pattern列(识别带.xls的行)
df["Regex pattern"] = df["Row tags"].str.contains(r"\.xls$")

中间表结果:

Row tags                  Values  Regex pattern
0  4                         100           False
1  100101 - Hospital A.xls   30            True
2  100195 - Hospital B.xls   30            True
3  100105 - Hospital C.xls   40            True
4  5                         50           False
5  100101 - Hospital A.xls   25            True
6  100195 - Hospital B.xls   25            True

后续解决方案

1. 生成分组Code列

利用ffill()向前填充,让子行继承最近的纯数字分组标签:

# 仅在纯数字行填充Code列,其余行设为NaN
df["Code"] = df["Row tags"].where(df["Regex pattern"] == False)
# 向前填充NaN,给所有子行分配对应分组的Code
df["Code"] = df["Code"].ffill()

2. 过滤掉总和行

只保留带.xls的子行(Regex pattern为True的行):

result = df[df["Regex pattern"] == True].copy()

3. 调整列格式

重命名列并调整到目标输出的顺序:

# 重命名Row tags为Hospital
result = result.rename(columns={"Row tags": "Hospital"})
# 选择并排序所需列,重置索引
result = result[["Code", "Hospital", "Values"]].reset_index(drop=True)

最终结果

运行上述代码后,result即为目标输出:

print(result)

输出:

Code                  Hospital  Values
0    4  100101 - Hospital A.xls      30
1    4  100195 - Hospital B.xls      30
2    4  100105 - Hospital C.xls      40
3    5  100101 - Hospital A.xls      25
4    5  100195 - Hospital B.xls      25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:23:29