如何在Pandas中将相似行转换为列?附数据示例
解决方法
这里提供两种简单有效的方式实现转换:
方法一:利用groupby+pivot处理
先给每个分组添加组内行号,再通过pivot转置为宽格式:
import pandas as pd df = pd.DataFrame({'doc':['john','john','john', 'mary', 'mary', 'mary'], 'token':[1,2,3,4,5,6]}) # 为每个doc分组生成组内序号 df['row_num'] = df.groupby('doc').cumcount() # 转置为目标格式 result_df = df.pivot(index='row_num', columns='doc', values='token') # 清理索引和列名 result_df = result_df.reset_index(drop=True) result_df.columns.name = None
方法二:通过groupby构造字典直接生成DataFrame
这种方式更直观,直接提取每个分组的token列表构造新DataFrame:
import pandas as pd df = pd.DataFrame({'doc':['john','john','john', 'mary', 'mary', 'mary'], 'token':[1,2,3,4,5,6]}) result_df = pd.DataFrame({ group_name: group['token'].tolist() for group_name, group in df.groupby('doc') })
为什么之前的方法可能失败?
你尝试的pivot/pivot_table等方法需要明确的行索引来区分同一分组内的不同行,原数据没有天然的分组内序号,直接使用会因重复索引导致结果不符合预期。添加组内序号后,就能正确完成转置。
内容的提问来源于stack exchange,提问作者brazilian_student
相关产品推荐
相关产品推荐

