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

如何用Pandas重构DataFrame:将重复相似行转换为新列?

Pandas实现DataFrame行转列重构

输入DataFrame

NamePhrase numberWords said
JohnPhrase 1Hi!
JohnPhrase 2How are you?
JohnPhrase 3Is everything okay?
BradPhrase 1Hello!
BradPhrase 2I am good!
BradPhrase 3How are you?

实现方法

可以用Pandas的pivot或pivot_table方法完成长格式到宽格式的转换,两种方法都能满足需求:

方法1:使用pivot(适用于无重复分组的场景)

import pandas as pd

# 构造输入数据
df = pd.DataFrame({
    'Name': ['John', 'John', 'John', 'Brad', 'Brad', 'Brad'],
    'Phrase number': ['Phrase 1', 'Phrase 2', 'Phrase 3', 'Phrase 1', 'Phrase 2', 'Phrase 3'],
    'Words said': ['Hi!', 'How are you?', 'Is everything okay?', 'Hello!', 'I am good!', 'How are you?']
})

# 行转列重构
result_df = df.pivot(
    index='Name',        # 作为行标识的列
    columns='Phrase number',  # 转换为新列的列
    values='Words said'       # 填充新列的内容
).reset_index()

# 移除列索引的名称,让输出更整洁
result_df.columns.name = None

方法2:使用pivot_table(适用于存在重复分组的场景,兼容性更强)

如果你的数据中存在同一(Name, Phrase number)组合对应多个值的情况,用pivot_table可以通过aggfunc指定聚合方式(比如取第一个、求和、均值等),这里我们用first取第一个值:

result_df = df.pivot_table(
    index='Name',
    columns='Phrase number',
    values='Words said',
    aggfunc='first'
).reset_index()

result_df.columns.name = None

输出结果

执行代码后得到的DataFrame如下:

NamePhrase 1Phrase 2Phrase 3
BradHello!I am good!How are you?
JohnHi!How are you?Is everything okay?

内容的提问来源于stack exchange,提问作者Vasily Ovechko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:36:23