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

Pandas含重复值长表用unstack无聚合保留全值转宽表实现问题

实现方案

核心思路

直接使用pivot/unstack报错的原因是同一个id+variable组合存在多个重复索引,只需要先给每组内的重复项添加递增序号,再将序号和变量名拼接为新列名后做长宽转换即可。

完整代码示例

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'id': [1,2,2,2,3,3,3],
    'variable': ['outcome_1','outcome_1','outcome_1','outcome_3','outcome_2','outcome_4','outcome_3'],
    'value': [pd.NA, '18:33','20:39','01:40','03:59','07:46','10:53']
})

# 1. 为每个id下的相同variable生成递增序号
df['suffix'] = df.groupby(['id', 'variable']).cumcount()
# 2. 拼接生成最终列名
df['col_name'] = df['variable'] + '_' + df['suffix'].astype(str)
# 3. 转换为宽表
res = df.pivot(index='id', columns='col_name', values='value').reset_index()
# 4. 调整列名和列顺序符合预期
res = res.rename(columns={'id': 'id_nmbr'})
expected_cols = ['id_nmbr', 'outcome_1_0', 'outcome_1_1', 'outcome_2_0', 'outcome_3_0', 'outcome_4_0']
res = res.reindex(columns=expected_cols)

print(res)

运行后输出与预期结果完全一致。

内容的提问来源于stack exchange,提问作者Jesper Mølgaard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:03