如何基于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
相关产品推荐
相关产品推荐

