如何在Pandas中无需分组实现含重复值的DataFrame转置?
DataFrame转置格式错误排查与解决
原始数据格式
ref text id a zz 12eia a yy radf02 b aa a8adf b bb 2022a
需求目标
将数据转换为以下格式:以ref列的值作为列名,text列的值作为对应列的内容,忽略id列
a b zz aa yy bb
你的错误代码
df_rotated = df.pivot_table(index='ref', values='text', columns='id', aggfunc='first')
错误原因
- 行列对应关系完全搞反:你把
ref设为行索引,id设为列名,和需求的ref做列名的要求完全相悖 pivot_table的聚合逻辑导致数据折叠:这里不需要按id分组聚合,指定columns='id'会把不同id的内容拆成列,最终只会保留每个ref下的第一条数据,自然出现折叠
正确解决方法
方法一:分组转置法
import pandas as pd # 按ref分组收集text,再转置成目标格式 df_rotated = df.groupby('ref')['text'].apply(list).apply(pd.Series).T
方法二:临时索引透视法
import pandas as pd # 给每个ref组添加组内序号作为统一行索引 df['temp_idx'] = df.groupby('ref').cumcount() # 透视生成目标格式,最后移除临时索引 df_rotated = df.pivot(index='temp_idx', columns='ref', values='text').reset_index(drop=True)
两种方法都能生成你需要的目标格式DataFrame,可根据习惯选择使用。
内容的提问来源于stack exchange,提问作者RustyShackleford
相关产品推荐
相关产品推荐

