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

如何用Python的Pandas/NumPy实现指定DataFrame结构转换?

Pandas DataFrame 列转换解决方案

原始数据结构

A        B        D     E 
foo-1    bar-6    C1    11
foo-2    bar-5    C2    12
foo-3    bar-4    C1    13
foo-4    bar-3    C1    14
foo-5    bar-2    C2    15
foo-6    bar-1    C2    16

期望转换结构

结构一

A        B        C1    C2
foo-1    bar-6    11    NAN
foo-2    bar-5    NAN   12
foo-3    bar-4    13    NAN
foo-4    bar-3    14    NAN
foo-5    bar-2    NAN   15
foo-6    bar-1    NAN   16

结构二(可后续删除D、E列)

A        B        D    E    C1    C2
foo-1    bar-6    C1   11   11    NAN
foo-2    bar-5    C2   12   NAN   12
foo-3    bar-4    C1   13   13    NAN
foo-4    bar-3    C1   14   14    NAN
foo-5    bar-2    C2   15   NAN   15
foo-6    bar-1    C2   16   NAN   16

用户尝试的错误代码

for row in dataframe.index:
    dataframe[dataframe[D]] = dataframe[E]

正确转换方法

生成结构一

直接用pivot函数实现列转置,自动匹配对应值并填充缺失项:

import pandas as pd

# 假设原始数据存储在df变量中
pivoted_df = df.pivot(index=['A', 'B'], columns='D', values='E').reset_index()
# 清除多级列名的层级标记
pivoted_df.columns.name = None
print(pivoted_df)

生成结构二

保留原D、E列的同时新增C1/C2列,可借助虚拟变量与原E列相乘实现:

import pandas as pd

# 生成D列的虚拟变量矩阵
dummies = pd.get_dummies(df['D'])
# 虚拟变量与E列相乘,得到对应列的赋值结果
new_columns = dummies.mul(df['E'], axis=0)
# 合并原数据与新生成的列
result_df = pd.concat([df, new_columns], axis=1)
print(result_df)

# 若后续需要删除D、E列,执行以下代码
# result_df = result_df.drop(['D', 'E'], axis=1)

错误代码问题说明

  1. 语法错误:dataframe[D]未加引号,正确写法应为dataframe['D']
  2. 逻辑错误:循环中批量赋值会覆盖整列数据,而非按行匹配赋值;Pandas是面向列的操作,循环处理行效率低且易出错,优先用内置函数实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:52:40