如何在Python中将DataFrame的列值转换为独立列?
将DataFrame的Area列取值转为独立列展示对应count值的实现方法
可以通过Pandas的pivot或pivot_table方法快速实现需求,两种方法分别适配不同的数据场景:
方法1:使用pivot(适用于无重复的Country-Year-Area组合)
如果你的数据中,每个Country-Year-Area组合仅出现一次,直接用pivot即可完成转换:
import pandas as pd # 构造示例原始DataFrame df = pd.DataFrame({ 'Country': ['USA', 'USA', 'China', 'China', 'Japan', 'Japan'], 'Year': [2020, 2020, 2021, 2021, 2022, 2022], 'Area': ['T', 'NT', 'T', 'NT', 'T', 'NT'], 'count': [100, 50, 200, 80, 150, 60] }) # 执行格式转换 result = df.pivot(index=['Country', 'Year'], columns='Area', values='count').reset_index() # 整理列名(可选操作) result.columns.name = None # 移除列的层级标签 result = result.rename(columns={'T': 'T_count', 'NT': 'NT_count'}) # 自定义列名 # 处理缺失值(如果存在部分Country-Year仅包含T/NT的情况) result = result.fillna(0)
转换后的结果示例:
| Country | Year | T_count | NT_count |
|---|---|---|---|
| China | 2021 | 200 | 80 |
| Japan | 2022 | 150 | 60 |
| USA | 2020 | 100 | 50 |
方法2:使用pivot_table(适用于存在重复的Country-Year-Area组合)
如果原始数据中同一个Country-Year-Area组合有多个行,需要对count进行聚合(求和、均值等),用pivot_table更合适:
# 构造包含重复行的示例数据 df_dup = pd.DataFrame({ 'Country': ['USA', 'USA', 'USA', 'USA'], 'Year': [2020, 2020, 2020, 2020], 'Area': ['T', 'T', 'NT', 'NT'], 'count': [60, 40, 30, 20] }) # 转换并聚合(默认对重复值求和) result_dup = df_dup.pivot_table( index=['Country', 'Year'], columns='Area', values='count', aggfunc='sum' # 可替换为'mean'/'max'等其他聚合函数 ).reset_index() result_dup.columns.name = None result_dup = result_dup.fillna(0)
转换后的结果示例:
| Country | Year | T | NT |
|---|---|---|---|
| USA | 2020 | 100 | 50 |
关键参数说明
index:指定作为行唯一标识的列,这里是Country和Year,确保每行对应唯一的国家-年份组合columns:需要转为独立列的原列(即Area),其取值会成为新的列名values:填充到新列中的数值列(即count)aggfunc:仅pivot_table需要,指定重复行的聚合规则
内容的提问来源于stack exchange,提问作者user20494840
相关产品推荐
相关产品推荐

