Pandas如何生成保留原始行顺序的pivot table(数据透视表)
实现方案
我们可以通过Python+Pandas实现需求,全程不会打乱数据集的原始排序:
步骤1:导入数据集
可以直接读取你给出的HTML表格,或是已经导出的CSV文件,自动保留原始行顺序:
import pandas as pd # 读取本地HTML表格 df = pd.read_html("你的HTML文件路径")[0] # 若已导出为CSV可以用以下代码读取 # df = pd.read_csv("你的数据集文件路径.csv")
步骤2:关联AMG子分类与对应主分类
你提到AMG是它上方最近的非AMG分类的子项,我们可以通过向前填充的方式生成主分类关联列:
# 非AMG行的主分类为自身category值,AMG行沿用最近的非AMG分类名 df["主分类"] = df["category"].where(df["category"] != "AMG").ffill()
步骤3:按要求格式输出
# 按主分类分组输出,注意必须加sort=False参数,避免Pandas默认按分类名排序打乱原始顺序 for main_cat, group in df.groupby("主分类", sort=False): # 先输出主分类的核心指标 main_row = group[group["category"] != "AMG"].iloc[0] print(f"{main_cat} | {main_row['segment']} | {main_row['ytd2018']} | {main_row['ytd2019']} | {main_row['Evolution']}") # 再输出该主分类下的所有AMG子项 amg_rows = group[group["category"] == "AMG"] for _, amg_row in amg_rows.iterrows(): print(f" AMG {main_cat} | {amg_row['segment']} | {amg_row['ytd2018']} | {amg_row['ytd2019']} | {amg_row['Evolution']}")
效果说明
输出的主分类顺序完全匹配你原始数据中的非AMG分类出现顺序:Abcd → LEP → Perq → Lio → HEPT → Slid → NPD,每个主分类下的AMG子项顺序也和原始数据中该主分类后紧跟的AMG行顺序完全一致,完全符合保留原始排序的核心要求。
内容的提问来源于stack exchange,提问作者nikita1221
相关产品推荐
相关产品推荐

