如何使用Python按特定规则转置含门店列的表格?
Python实现表格特定转置方案
需求说明
原表格结构(宽表):
| 门店 | 1月1日 | 1月2日 | 1月3日 |
|---|---|---|---|
| 门店A | 100 | 150 | 200 |
| 门店B | 80 | 120 | 180 |
转置后目标结构(长表):
| 门店 | 日期 | 数值 |
|---|---|---|
| 门店A | 1月1日 | 100 |
| 门店A | 1月2日 | 150 |
| 门店A | 1月3日 | 200 |
| 门店B | 1月1日 | 80 |
| 门店B | 1月2日 | 120 |
| 门店B | 1月3日 | 180 |
核心规则:将第一列(门店)以外的表头作为新列的取值,与第一列的每行值组合生成多行数据,所有门店重复此逻辑。
实现代码(使用Pandas)
Pandas的melt函数是处理这类宽表转长表需求的最优方案,代码如下:
import pandas as pd # 读取原表格(Excel文件用read_excel,CSV文件用read_csv) df = pd.read_excel("原表格.xlsx") # 执行转置操作 transposed_df = df.melt( id_vars=["门店"], # 第一列的列名,需根据实际表格调整 var_name="日期", value_name="数值" ) # 输出转置后的表格到文件 transposed_df.to_excel("转置后表格.xlsx", index=False) # 打印查看结果 print(transposed_df)
代码说明
id_vars=["门店"]:指定保留不转置的列,确保每个门店的信息被保留。var_name="日期":把原表格中除第一列外的表头(如1月1日、1月2日)作为新列"日期"的取值。value_name="数值":将原表格对应单元格的数值存入"数值"列。index=False:输出文件时不保留Pandas默认索引列,让表格更整洁。
若原表格第一列列名不是"门店",修改id_vars中的对应名称即可适配。
内容的提问来源于stack exchange,提问作者Berny
相关产品推荐
相关产品推荐

