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
相关产品推荐
相关产品推荐

