Pandas:如何仅转置数据集部分内容实现长表转宽表
解决方法:用Pandas透视表快速转换数据结构
嘿,你完全不用手动遍历重构DataFrame!Pandas内置的pivot或pivot_table方法就能完美解决这个问题,代码简洁还高效,尤其适合处理这种长格式转宽格式的需求。
步骤1:准备原始数据
先把你的数据集转换成Pandas DataFrame(假设你还没做这一步):
import pandas as pd # 你的原始数据 raw_data = [ ("Key 1", "Normal", 5), ("Key 1", "Sponsored", 2), ("Key 2", "Normal", 1), ("Key 2", "Sponsored", 0), ("Key 3", "Normal", 5), ("Key 4", "Sponsored", 3), ("Key 5", "Normal", 5), ("Key 5", "Sponsored", 4) ] df = pd.DataFrame(raw_data, columns=["Keyword", "Type", "Count"])
步骤2:用pivot转换格式
这是最直接的方法,适合你的数据(每个关键词+Type组合唯一):
# 执行透视转换 pivoted_df = df.pivot( index="Keyword", # 作为行的列 columns="Type", # 作为列的列 values="Count" # 填充到单元格的值 ).reset_index() # 清理列名(去掉默认的"Type"列名标签) pivoted_df.columns.name = None # 将缺失值替换为"N/A" pivoted_df = pivoted_df.fillna("N/A")
执行后得到的结果就是你想要的结构:
| Keyword | Normal | Sponsored |
|---|---|---|
| Key 1 | 5 | 2 |
| Key 2 | 1 | 0 |
| Key 3 | 5 | N/A |
| Key 4 | N/A | 3 |
| Key 5 | 5 | 4 |
备选方法:pivot_table(更通用)
如果你的数据里存在重复的关键词+Type组合(比如同一个关键词的Normal类型有多个Count值),可以用pivot_table做聚合处理,同时直接填充缺失值:
pivot_table_df = df.pivot_table( index="Keyword", columns="Type", values="Count", aggfunc="sum", # 重复行的聚合方式,比如求和、取均值等 fill_value="N/A" # 直接填充缺失值为"N/A" ).reset_index() pivot_table_df.columns.name = None
为什么这两种方法更好?
- 完全避免手动遍历,利用Pandas的向量化操作,处理大数据集时速度远超循环
- 代码简洁易读,后续维护成本低
- 自动处理缺失值,不用自己写判断逻辑
这样就能轻松得到你想要的表结构啦!
内容的提问来源于stack exchange,提问作者Federico Dorato
相关产品推荐
相关产品推荐

