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

如何使用Pandas将DataFrame同组多行数据转换为单行?

解决Pandas DataFrame按组转宽表的问题

嘿,这个需求其实很常见,用Pandas的分组和重塑功能就能轻松搞定!我给你一步步拆解怎么做:

首先,先把你的原始数据用代码复现出来,方便我们测试:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({
    'a': [1, 1, 1, 1, 2, 2, 2],
    'b': [10, 30, 60, 80, 10, 60, 80],
    'c': [20, 40, 70, 100, 20, 70, 100]
})

接下来核心步骤:

  1. 给每组添加行编号:我们需要给每个a值对应的行标记顺序(1、2、3...),这样才能把同组的b、c分别转成b1、c1、b2、c2这类列:

    # 按a分组后,给每行从1开始计数
    df['row_num'] = df.groupby('a').cumcount() + 1
    
  2. 转成宽表格式:用pivot函数把行转成列,以a为索引,row_num为列,b和c为值:

    wide_df = df.pivot(index='a', columns='row_num', values=['b', 'c'])
    
  3. 整理列名:这时候列名是多层的(比如('b', 1)),我们把它合并成你要的b1、c1格式:

    wide_df.columns = [f'{col}{num}' for col, num in wide_df.columns]
    
  4. 收尾处理:把a从索引变回普通列,同时给缺失的位置填充NA(对应第二组只有3行的情况):

    wide_df = wide_df.reset_index().fillna(pd.NA)
    

现在你打印wide_df,就得到了你想要的结果:

a  b1  c1  b2  c2  b3   c3    b4     c4
0  1  10  20  30  40  60  70  80  100
1  2  10  20  60  70  80  100  <NA>  <NA>

如果你的数据量很大,这个方法效率也很高,因为都是Pandas的内置向量操作,比循环快多啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:32:31