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

R语言中如何将Station.ID列重组为带标识的月份列(Spread/Reshape?)

解决方案:用Pandas重塑数据表(将Station.ID与月份列合并)

我来帮你搞定这个数据重塑的需求!下面用Python的Pandas库来实现——这是处理这类表格变换最便捷的工具,完全匹配你描述的需求:

步骤1:先模拟你的原始数据表

先构造一个和你描述一致的示例原表,方便你对照理解:

import pandas as pd

# 模拟含多站点、多年份的原始数据
df = pd.DataFrame({
    'Station.ID': [323, 452, 323, 452],
    'Year': [2020, 2020, 2021, 2021],
    'Jan': [10.2, 15.5, 12.1, 16.3],
    'Feb': [8.7, 13.2, 9.5, 14.1],
    'Mar': [12.5, 17.8, 13.3, 18.5]
})

原表结构大概是这样:

Station.IDYearJanFebMar
323202010.28.712.5
452202015.513.217.8
323202112.19.513.3
452202116.314.118.5

步骤2:执行数据变换,生成目标表

通过「融化-重组」的两步操作,就能得到你想要的格式:

# 第一步:把所有月份列转成行,保留Station.ID和Year作为标识列
melted_df = df.melt(id_vars=['Station.ID', 'Year'], var_name='Month', value_name='Value')

# 第二步:生成新列名(格式:月份_站点ID),再重新转回宽表
melted_df['New_Column'] = melted_df['Month'] + '_' + melted_df['Station.ID'].astype(str)
result_df = melted_df.pivot(index='Year', columns='New_Column', values='Value')

步骤3:查看最终结果

执行完代码后,最终的表就是你期望的样子——以Year为索引,列名都是Jan_323、Feb_452这类带站点标识的月份字段:

YearJan_323Jan_452Feb_323Feb_452Mar_323Mar_452
202010.215.58.713.212.517.8
202112.116.39.514.113.318.5

关键细节说明

  • 不管你原表有多少个月份列(比如Apr、May...),这段代码都会自动处理所有非Station.ID和Year的列,不用额外修改;
  • 把Station.ID转成字符串是为了避免和月份名(字符串)拼接时出现类型错误;
  • 如果原表存在缺失值,pivot会自动用NaN填充,你可以加.fillna(0)之类的方法按需处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:19:02