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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:05:22