如何用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)
错误代码问题说明
- 语法错误:
dataframe[D]未加引号,正确写法应为dataframe['D'] - 逻辑错误:循环中批量赋值会覆盖整列数据,而非按行匹配赋值;Pandas是面向列的操作,循环处理行效率低且易出错,优先用内置函数实现。
内容的提问来源于stack exchange,提问作者craig
相关产品推荐
相关产品推荐

