Python pandas:将DataFrame列值按指定列名复制到新DataFrame
问题描述
现有DataFrame df1,第一列存在重复值,第二列元素唯一,数据如下:
0 1 0 A Ok 1 B 1234 2 C True 3 D Yes 4 A Ok 5 B 6789 6 C False 7 D No
已通过以下代码创建以df1第一列去重值为列名的新DataFrame df2:
column_names = df1[0].drop_duplicates() df2 = pd.DataFrame(columns=column_names)
需要将df1第二列的元素对应复制到df2的对应列中,目标效果如下:
A B C D 0 Ok 1234 True Yes 1 Ok 6789 False No 2 Ok 1567 False N/A
解决方案
可以通过分组编号+透视表的方式实现,核心逻辑是给每个分组(A/B/C/D)内的行分配递增序号,再以此序号为索引做透视,自动对齐对应列:
import pandas as pd # 初始化原始df1 df1 = pd.DataFrame({ 0: ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D'], 1: ['Ok', 1234, True, 'Yes', 'Ok', 6789, False, 'No'] }) # 给每个分组内的行添加自增编号,用于后续行对齐 df1['row_index'] = df1.groupby(0).cumcount() # 透视生成目标df2,缺失值替换为'N/A' df2 = df1.pivot(index='row_index', columns=0, values=1).reset_index(drop=True) df2 = df2.fillna('N/A') # 若需手动添加示例中的第三行数据 df2.loc[len(df2)] = ['Ok', 1567, False, 'N/A'] print(df2)
运行后输出:
A B C D 0 Ok 1234 True Yes 1 Ok 6789 False No 2 Ok 1567 False N/A
关键说明
groupby(0).cumcount():给每个分组内的行从0开始编号,确保同一分组的不同数据对应df2的不同行pivot方法:自动将分组值转为列名,编号转为行索引,实现数据的对应填充- 若有额外行需要补充,可通过
df2.loc[len(df2)]手动添加,或根据业务逻辑批量生成
内容的提问来源于stack exchange,提问作者Pradyumna TK
相关产品推荐
相关产品推荐

