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

Pandas如何对指定列(London/New York/Boston)执行宽表转长表操作?

宽表转长格式的实现方案

你之前的代码出错是因为 pd.wide_to_long 要求待堆叠的列必须带有统一前缀,你当前的城市列(London、New York、Boston)无公共前缀,所以直接传["place"]无法匹配到对应列,无法得到正确结果。
推荐使用更适配当前场景的 pd.melt 实现,无需修改原列名:

import pandas as pd

# 原始测试数据
df = pd.DataFrame({
    'date' : ['2021-08-01', '2021-08-01', '2021-08-01', '2021-08-02', '2021-08-02', '2021-08-02'],
    'person': ['type_A', 'type_C', 'type_C', 'type_A', 'type_B', 'type_D'],
    'London' : [1, 4, 7, 5, 7, 9],
    'New York' : [2, 5, 8, 7, 9, 10],
    'Boston' : [3, 6, 9, 1, 2, 7]
})

# 核心转换代码
long_df = df.melt(
    id_vars=['date', 'person'],
    value_vars=['London', 'New York', 'Boston'],
    var_name='city',
    value_name='value'
)

如果你坚持使用 pd.wide_to_long,需要先给城市列添加统一前缀再调用:

# 给城市列添加统一前缀
df = df.rename(columns={
    'London': 'place_London',
    'New York': 'place_New York',
    'Boston': 'place_Boston'
})
df['id'] = df.index

long_df = pd.wide_to_long(
    df,
    stubnames=['place'],
    i='id',
    j='city',
    sep='_',
    suffix='.+'
).reset_index(drop=True)

两种方法得到的最终长格式数据完全一致,优先选择melt方案代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:18:05