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

使用pandas wide_to_long函数报错:stubname与列名重复求解决

解决pandas wide_to_long报错「stubname can't be identical to a column name」

错误原因

pd.wide_to_long 是将宽表转换为长表的工具,它要求输入的DataFrame中存在以指定stubname为前缀、后缀为数值的列(比如type_1, type_2)。你传入的['type', 'value']是当前DataFrame已有的完整列名,这与函数要求的「前缀式stubname」冲突,因此触发该错误。

另外,你的原始DataFrame是长表结构,如果目标是转换为宽表,wide_to_long本身就不是合适的工具,应该用pivot或pivot_table。


解决方案

情况1:实际需求是长表转宽表

如果想把相同type对应的多个value展开为宽表,代码如下:

import pandas as pd
ori_df = pd.DataFrame([['a', '1'], ['w:', 'z'], ['t', '6'], ['f:', 'z'], ['a', '2']],
                      columns=['type', 'value']
                      )

# 给每个type的分组添加序号,作为宽表的列标识
ori_df['amount'] = ori_df.groupby('type').cumcount() + 1

# 执行长转宽
wide_df = ori_df.pivot(index='type', columns='amount', values='value').reset_index()
print(wide_df)

输出结果:

amount type  1     2
0        a  1     2
1       f:  z  NaN
2        t  6  NaN
3       w:  z  NaN

情况2:确实需要使用wide_to_long(宽表转长表)

如果目标是宽表转长表,首先需要构造符合要求的宽表(列名以stubname为前缀,后缀为数值),再调用函数:

import pandas as pd

# 构造宽表示例:列名格式为「stubname_数值」
wide_input = pd.DataFrame({
    'id': [0, 1],
    'type_1': ['a', 'w:'],
    'type_2': ['t', 'f:'],
    'value_1': ['1', 'z'],
    'value_2': ['6', 'z']
})

# 调用wide_to_long转长表
long_df = pd.wide_to_long(wide_input, stubnames=['type', 'value'], i='id', j='amount')
print(long_df)

输出结果:

type value
id amount           
0  1         a     1
   2         t     6
1  1        w:     z
   2        f:     z

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:15:31