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

如何基于DataFrame中重复列值创建目标结构的新DataFrame

问题:将分组后的DataFrame重排为指定格式

原始DataFrame定义及输出:

import pandas as pd
df=pd.DataFrame({"a":[1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4],"b":[5,4,8,9,2,3,4,1,9,5,6,7,8,6,1,8]})
print(df)

输出:

a  b
0   1  5
1   1  4
2   1  8
3   1  9
4   2  2
5   2  3
6   2  4
7   2  1
8   3  9
9   3  5
10  3  6
11  3  7
12  4  8
13  4  6
14  4  1
15  4  8

期望得到的目标DataFrame格式:

1  2  3  4
0  5  2  9  8
1  4  3  5  6
2  8  4  6  1
3  9  1  7  8 

尝试直接使用pd.DataFrame(df.groupby(["a"]))得到的错误结果:

0   1
0   1   a b 0 1 5 1 1 4 2 1 8 3 1 9
1   2   a b 4 2 2 5 2 3 6 2 4 7 2 1
2   3   a b 8 3 9 9 3 5 10 3 6 11 3 7
3   4   a b 12 4 8 13 4 6 14 4 1 15 4 8

解决方案

方法1:groupby + unstack

分组后重置每组的行索引,再转置行列关系:

result = df.groupby('a')['b'].apply(lambda x: x.reset_index(drop=True)).unstack()
print(result)

方法2:cumcount + pivot

先给每个分组内的行添加连续序号,再通过透视表转换结构:

# 生成组内行序号
df['row_idx'] = df.groupby('a').cumcount()
# 透视转换为目标格式
result = df.pivot(index='row_idx', columns='a', values='b')
# 移除索引名称,让输出更贴合目标样式
result.index.name = None
print(result)

两种方法均可生成符合要求的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:48:08