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

如何转置重排城市气温降雨DataFrame至目标格式?

解决方法

你可以用pandas的pd.wide_to_long()函数实现这种宽表转长表的转换,这个函数专门适配列名是「类别_指标」格式的场景,完美匹配你的需求。

步骤1:还原原始数据

先把你的示例DataFrame用代码还原:

import pandas as pd

data = {
    'Datetime': ['2022-01-01 10:00:00', '2022-01-01 11:00:00', '2022-01-01 12:00:00', '2022-01-01 13:00:00'],
    'Berlin_temperature': [24,24,24,24],
    'Dublin_temperature': [24,24,24,24],
    'London_temperature': [24,24,24,24],
    'Paris_temperature': [24,24,24,24],
    'Berlin_rain': [10,10,10,10],
    'Dublin_rain': [10,10,10,10],
    'London_rain': [10,10,10,10],
    'Paris_rain': [10,10,10,10]
}
df = pd.DataFrame(data)

步骤2:用wide_to_long完成转换

# 执行宽转长操作
df_long = pd.wide_to_long(
    df,
    stubnames=['temperature', 'rain'],  # 指定指标的前缀(去掉城市名后的部分)
    i='Datetime',  # 保留的基准列
    j='City',  # 拆分出来的城市列名称
    sep='_',  # 列名里的分隔符
    suffix='.*'  # 匹配分隔符后的任意字符(这里就是城市名)
)

# 重置索引,把Datetime和City变回普通列
df_long = df_long.reset_index()

# 重命名列名匹配你的目标结构
df_long = df_long.rename(columns={
    'temperature': 'Temperature',
    'rain': 'Rainfall'
})

# 调整列顺序
df_long = df_long[['Datetime', 'City', 'Temperature', 'Rainfall']]

运行后得到的结果就和你想要的结构完全一致。

备选方案:用melt函数分步处理

如果你更习惯用melt,可以拆分温度和降雨数据后再合并:

# 处理温度列
temp_df = df.melt(
    id_vars='Datetime',
    value_vars=['Berlin_temperature', 'Dublin_temperature', 'London_temperature', 'Paris_temperature'],
    var_name='City',
    value_name='Temperature'
)
# 提取城市名称(去掉末尾的_temperature)
temp_df['City'] = temp_df['City'].str.replace('_temperature', '')

# 处理降雨列
rain_df = df.melt(
    id_vars='Datetime',
    value_vars=['Berlin_rain', 'Dublin_rain', 'London_rain', 'Paris_rain'],
    var_name='City',
    value_name='Rainfall'
)
rain_df['City'] = rain_df['City'].str.replace('_rain', '')

# 合并两个DataFrame
df_long = pd.merge(temp_df, rain_df, on=['Datetime', 'City'])

这个方法同样能得到目标结构,只是步骤稍多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:40:14