如何在同一DataFrame中将单列转换为表头行并重构数据?
问题描述
原始数据集:
| Name | Assignment | Scores |
|---|---|---|
| Boo | Test1 | 0.9 |
| Buzz | Test3 | 0.7 |
| Bree | Test2 | 1.0 |
| Boo | Quiz | 1.0 |
| Buzz | Test1 | 0.8 |
期望输出结果:
| Name | Test1 | Test3 | Test2 | Quiz |
|---|---|---|---|---|
| Boo | 0.9 | 0 | 0 | 1.0 |
| Buzz | 0.8 | 0.7 | 0 | 0 |
| Bree | 0 | 0 | 1.0 | 0 |
尝试过DataFrame.T(仅对整个DataFrame生效)和pivot()方法,但未达到预期效果,寻求解决办法。
解决方案
方法1:使用pivot_table(推荐)
pivot_table可直接指定缺失值填充值,一步完成透视和补0操作:
import pandas as pd # 构造原始DataFrame data = { 'Name': ['Boo', 'Buzz', 'Bree', 'Boo', 'Buzz'], 'Assignment': ['Test1', 'Test3', 'Test2', 'Quiz', 'Test1'], 'Scores': [0.9, 0.7, 1.0, 1.0, 0.8] } df = pd.DataFrame(data) # 生成透视表,缺失值填充为0,重置索引并清除列名标识 result = df.pivot_table( index='Name', columns='Assignment', values='Scores', fill_value=0 ).reset_index() result.columns.name = None print(result)
方法2:使用pivot + fillna
若坚持使用pivot,可后续通过fillna(0)补全缺失的分数:
import pandas as pd data = { 'Name': ['Boo', 'Buzz', 'Bree', 'Boo', 'Buzz'], 'Assignment': ['Test1', 'Test3', 'Test2', 'Quiz', 'Test1'], 'Scores': [0.9, 0.7, 1.0, 1.0, 0.8] } df = pd.DataFrame(data) # 先透视,再填充缺失值为0,最后调整索引和列名 result = df.pivot( index='Name', columns='Assignment', values='Scores' ).fillna(0).reset_index() result.columns.name = None print(result)
两种方法都能生成目标表格结构,pivot_table更简洁高效,适合这类需要处理缺失值的透视场景。
内容的提问来源于stack exchange,提问作者Mimikyu o_0
相关产品推荐
相关产品推荐

