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

如何将含日期的宽格式降水DataFrame转换为长格式?

解决降水量DataFrame宽转长的问题

没问题,我来帮你搞定这个需求!要把以日份为列名的宽格式DataFrame转换成每个月份对应日份的长格式,用pandas的melt()函数就能轻松实现,还能保证顺序完全符合你的预期。

步骤详解

假设你的原始DataFrame结构大概是这样(每行对应一个月份,列是1到31的日份,值为对应日期的降水量):

月份123
02023-010.50.01.2
12023-020.00.80.3

我们可以按以下步骤完成转换:

  1. 用melt()实现宽表转长表
    这个函数的核心作用就是把横向的列数据“融化”成纵向的行数据,我们只需要指定哪些列保持不变(比如月份),哪些列要转换成新的行维度(日份列)。

  2. 修正日份的数据类型
    日份列默认会是字符串类型,排序时会出现"10"排在"2"前面的混乱情况,所以要把它转成整数类型。

  3. 按月份+日份排序
    最后通过排序确保每个月份的日份是按数字顺序依次排列的。

完整代码示例

import pandas as pd

# 替换成你自己的实际DataFrame
precip_df = pd.DataFrame({
    "月份": ["2023-01", "2023-02"],
    1: [0.5, 0.0],
    2: [0.0, 0.8],
    3: [1.2, 0.3]
})

# 核心转换逻辑
long_format_df = pd.melt(
    precip_df,
    id_vars="月份",  # 保持不变的标识列(可以是单独月份或完整年月)
    value_vars=[col for col in precip_df.columns if col != "月份"],  # 所有代表日份的列
    var_name="日份",  # 新生成的日份列名称
    value_name="降水量"  # 对应降水量值的列名称
)

# 转换日份为整数,避免字符串排序混乱
long_format_df["日份"] = long_format_df["日份"].astype(int)

# 按月份和日份排序,得到预期的顺序
long_format_df = long_format_df.sort_values(by=["月份", "日份"]).reset_index(drop=True)

print(long_format_df)

最终输出结果

运行后你会得到完全符合需求的长格式DataFrame:

月份日份降水量
02023-0110.5
12023-0120.0
22023-0131.2
32023-0210.0
42023-0220.8
52023-0230.3

如果你的原始DataFrame里月份是单独的数字(比如1代表1月),只需要调整排序逻辑或者把月份和日份组合成完整日期即可,核心的melt()转换逻辑是通用的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:35:26