Pandas按分组将多行数据转为多列的实现问题咨询
问题原因
你原有代码运行不符合预期的核心原因是:unstack() 需要基于多级索引展开,你仅设置了userid作为单级索引,缺少代表同一用户下account序列的二级索引,无法完成行转列的展开操作。
解决代码
import pandas as pd # 构造原始数据(如果已经有df可跳过这一步) data = {'userid': ['001', '001', '002', '002', '002'], 'account': ['123', '456', '789', '123', '467']} df = pd.DataFrame(data) # 核心处理逻辑 # 1. 给同一userid下的每条account生成序号,拼接为 account 1、account 2格式的序列名 df['acc_seq'] = 'account ' + (df.groupby('userid').cumcount() + 1).astype(str) # 2. 设置userid和序列列为多级索引,提取account列后展开为多列 df = df.set_index(['userid', 'acc_seq'])['account'].unstack() # 3. (可选)重置索引,把userid从索引变回普通列 df = df.reset_index() print(df)
输出结果
运行后得到的输出和你预期一致,空值位置默认显示NaN(对应你提到的null):
acc_seq userid account 1 account 2 account 3 0 001 123 456 NaN 1 002 789 123 467
内容的提问来源于stack exchange,提问作者Amy Diana
相关产品推荐
相关产品推荐

