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

如何在Pandas中按ID分组将Value列拆分为带数字后缀的多列?

解决Pandas分组后将Value转为带数字后缀多列的问题

嘿,我来帮你搞定这个问题!你想要的是把每个ID对应的多个Value值拆分成带序号后缀的列,之前用pd.pivot(df, index='ID', columns='ID', values='Value')的思路不对——因为columns参数用了ID,导致列名重复,没法得到带序号的列。我们换个正确的步骤来实现:

核心思路

  1. 给每个ID组内的Value添加组内序号(从1开始),用来作为后续列的编号依据;
  2. 利用pivot将数据从长表转成宽表,用序号作为列;
  3. 重命名列名,改成Value1、Value2这类格式;
  4. 重置索引,把ID从索引变回普通列,匹配你期望的输出格式。

完整代码实现

import pandas as pd

# 你的示例DataFrame
df = pd.DataFrame({'ID': ['A', 'A', 'A', 'B', 'C', 'C', 'D', 'E', 'F', 'F', 'F', 'F'], 
                   'Value': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']})

# 步骤1:给每个ID组内的Value添加从1开始的序号
df['seq'] = df.groupby('ID').cumcount() + 1

# 步骤2:转成宽表,ID作为行索引,序号作为列,Value作为值
result = df.pivot(index='ID', columns='seq', values='Value')

# 步骤3:重命名列,生成Value1、Value2...的格式
result.columns = [f'Value{col}' for col in result.columns]

# 步骤4:重置索引,把ID从索引转为普通列
result = result.reset_index()

# 查看最终结果
print(result)

输出结果

运行后你会得到和你期望完全一致的DataFrame:

ID Value1 Value2 Value3 Value4
0  A      A      B      C    NaN
1  B      D    NaN    NaN    NaN
2  C      E      F    NaN    NaN
3  D      G    NaN    NaN    NaN
4  E      H    NaN    NaN    NaN
5  F      I      J      K      L

补充说明

  • 这个方法不管每个ID对应的Value数量多少都能自动适配,列数会自动根据最多的Value数量生成;
  • 如果你的Value是数值类型,代码不需要做任何修改,同样适用;
  • 空值会自动用NaN填充,符合你的示例要求。

内容的提问来源于stack exchange,提问作者High-Octane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:12:29