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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:05:30