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

使用Pandas将未排序的分散年份列合并为单列并重塑数据表格的方法

Pandas合并重复年份列并按年份聚合月度数据的解决方案

我懂你现在的困扰——这份TSV里年份和月份是分散配对、顺序打乱的,直接硬凑肯定行不通。别慌,咱们用Pandas的重塑功能就能轻松搞定,一步步来:

第一步:读取并确认数据

首先读取你的TSV文件,因为列头有重复的year,Pandas会自动给重复列名加上后缀(比如year.1、year.2),方便后续区分:

import pandas as pd

# 读取TSV文件,sep指定制表符分隔
df = pd.read_csv('your_file.tsv', sep='\t', header=0)
# 看看读取后的列名,应该是:['Jan', 'year', 'Feb', 'year.1', 'March', 'year.2']
print(df.columns)

如果不想找文件测试,也可以直接用你提供的数据构造完全匹配的示例DataFrame:

# 按你的数据行拆分构造示例(共4行,每行对应6个列值)
data = {
    'Jan': [23, 25, 21, 27],
    'year': [1992, 1990, 1993, 1991],
    'Feb': [34, 36, 38, 30],
    'year.1': [1991, 1993, 1992, 1990],
    'March': [43, 45, 47, 49],
    'year.2': [1993, 1990, 1991, 1992]
}
df = pd.DataFrame(data)

第二步:把分散的月-年数据转成长格式

咱们需要把每个月份和它对应的年份列配对,然后合并成一个统一的长表,这样年份和月度值就能准确绑定:

# 提取Jan和对应的year列,重命名并标记月份
jan_data = df[['Jan', 'year']].rename(columns={'Jan': 'value'})
jan_data['month'] = 'Jan'

# 提取Feb和对应的year.1列
feb_data = df[['Feb', 'year.1']].rename(columns={'Feb': 'value', 'year.1': 'year'})
feb_data['month'] = 'Feb'

# 提取March和对应的year.2列
march_data = df[['March', 'year.2']].rename(columns={'March': 'value', 'year.2': 'year'})
march_data['month'] = 'March'

# 合并三个月份的数据
long_df = pd.concat([jan_data, feb_data, march_data], ignore_index=True)

这一步之后,long_df会变成每一行对应一个年份+一个月份+对应数值的结构,彻底解决了年份分散的问题。

第三步:转成目标宽格式表格

现在用pivot把长表转回宽表,按year分组,每个月份作为独立列:

# 转成宽格式,year作为行索引,month作为列,value作为对应值
result = long_df.pivot(index='year', columns='month', values='value').reset_index()

# 调整列的顺序,和你想要的格式完全匹配
result = result[['year', 'Jan', 'Feb', 'March']]

# 移除列名的层级标记,让表格更整洁
result.columns.name = None

最终结果

运行完上面的代码,result就是你想要的格式:

yearJanFebMarch
1990253045
1991273447
1992233849
1993213643

核心思路就是先把分散的配对数据转成长格式统一管理,再转成宽格式聚合,这样不管年份怎么打乱,都能准确对应到每个月份的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:23:13