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

Python Pandas中如何按列a分组并将列b转换为多列?

解决Pandas按列分组后拆分列值到多列的问题

你可以通过分组添加序号+透视表转换的方式实现需求,具体步骤如下:

1. 准备原数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'a': [1, 2, 3, 4, 1, 2],
    'b': [10, 20, 30, 40, 50, 60]
})

2. 核心处理代码

# 为每个分组内的元素生成递增序号(从0开始)
df['group_idx'] = df.groupby('a').cumcount()

# 透视表转换:将序号转为列,拆分b列值到不同列
result_df = df.pivot(index='a', columns='group_idx', values='b').reset_index()

# 重命名列名,匹配需求的b和b1
result_df.columns = ['a', 'b', 'b1']

# 缺失值自动填充为NaN(pivot默认已处理,此步可省略)
result_df = result_df.fillna(np.nan)

3. 输出结果

执行后得到的result_df就是你需要的格式:

print(result_df)
#    a   b    b1
# 0  1  10  50.0
# 1  2  20  60.0
# 2  3  30   NaN
# 3  4  40   NaN

原理说明

  • groupby('a').cumcount():给每个a分组内的元素分配唯一序号,同一a的多个b值会被标记为0、1、2...
  • pivot:将序号作为列名,把同一a对应的不同b值映射到不同列,没有对应值的位置自动填充NaN
  • 最后通过重命名列名,得到符合要求的结构

如果你偏好更简洁的写法,也可以用groupby结合unstack实现:

result_df = df.groupby('a')['b'].apply(pd.Series).unstack()
result_df.columns = ['b', 'b1']
result_df = result_df.reset_index().rename_axis(None, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:57:19