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

Pandas如何将重复列转置为行 处理月份重复列的数据重构需求

解决方法

核心思路是先拆分原表中重复的列组,合并为标准结构后再做长宽格式转换,完整代码如下:

import pandas as pd

# 步骤1:将原df按每5列一组拆分,对应A/B/C/D四个站点的子表
sub_dfs = []
for col_idx in range(0, len(df1.columns), 5):
    current_sub = df1.iloc[:, col_idx:col_idx+5].copy()
    # 统一子表列名,避免重复列名冲突
    current_sub.columns = ["year", "site", "1", "2", "3"]
    sub_dfs.append(current_sub)

# 步骤2:合并所有子表为统一的长表基础结构
full_sub = pd.concat(sub_dfs, ignore_index=True)

# 步骤3:将月份列从宽表转置为行
melted_df = full_sub.melt(
    id_vars=["year", "site"],
    value_vars=["1", "2", "3"],
    var_name="month",
    value_name="val"
)

# 步骤4:将站点从行转为列,得到目标结构
result_df = melted_df.pivot(
    index=["year", "month"],
    columns="site",
    values="val"
).reset_index()

# 可选:调整列名、格式匹配需求
result_df.columns = ["year", "month", "Site A", "Site B", "Site C", "Site D"]
result_df["month"] = result_df["month"].astype(int)

执行后result_df就是你需要的目标结构,和你给出的样例输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:09:04