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

如何在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)

转换后的结果示例:

CountryYearT_countNT_count
China202120080
Japan202215060
USA202010050

方法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)

转换后的结果示例:

CountryYearTNT
USA202010050

关键参数说明

  • index:指定作为行唯一标识的列,这里是Country和Year,确保每行对应唯一的国家-年份组合
  • columns:需要转为独立列的原列(即Area),其取值会成为新的列名
  • values:填充到新列中的数值列(即count)
  • aggfunc:仅pivot_table需要,指定重复行的聚合规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:01:13