如何用Pandas重构DataFrame:将重复相似行转换为新列?
Pandas实现DataFrame行转列重构
输入DataFrame
| Name | Phrase number | Words said |
|---|---|---|
| John | Phrase 1 | Hi! |
| John | Phrase 2 | How are you? |
| John | Phrase 3 | Is everything okay? |
| Brad | Phrase 1 | Hello! |
| Brad | Phrase 2 | I am good! |
| Brad | Phrase 3 | How 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如下:
| Name | Phrase 1 | Phrase 2 | Phrase 3 |
|---|---|---|---|
| Brad | Hello! | I am good! | How are you? |
| John | Hi! | How are you? | Is everything okay? |
内容的提问来源于stack exchange,提问作者Vasily Ovechko
相关产品推荐
相关产品推荐

