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

如何在Pandas DataFrame中将指定列的多行值追加到首行作为新列

实现DataFrame列值转首行新列的解决方案

我来帮你搞定这个需求~咱们先理清目标:把原DataFrame中col2列里除首行外的所有值,作为新列添加到首行数据中,同时还要处理空DataFrame的边界情况。

先看原数据与目标结构

原DataFrame代码:

import pandas as pd
df = pd.DataFrame()
df['col1'] = ('y','y','y')
df['col2'] = ('a','b','c')
df['col3'] = ('x','x','x')

目标是得到这样的结果:

col1col2col3col21col22
yaxbc

正确实现步骤

核心思路是:保留首行数据,提取col2的剩余值作为新列,再拼接在一起,同时优先处理空DataFrame的情况避免报错。

完整代码如下:

import pandas as pd

def transform_df(df):
    # 边界条件:空DataFrame直接返回,不执行任何操作
    if df.empty:
        return df
    
    # 提取首行数据(用iloc[[0]]保持DataFrame格式,而非转成Series)
    result_df = df.iloc[[0]].copy()
    
    # 提取col2中除首行外的所有值
    extra_col2_vals = df['col2'].iloc[1:].values
    
    # 动态生成新列名,比如col21、col22...
    new_columns = [f'col2{i+1}' for i in range(len(extra_col2_vals))]
    
    # 将提取的值逐个添加为新列
    for col_name, val in zip(new_columns, extra_col2_vals):
        result_df[col_name] = val
    
    return result_df

# 测试原数据
df = pd.DataFrame()
df['col1'] = ('y','y','y')
df['col2'] = ('a','b','c')
df['col3'] = ('x','x','x')

print(transform_df(df))

# 测试空DataFrame
empty_df = pd.DataFrame()
print(transform_df(empty_df))  # 输出空DataFrame,无任何操作

关键细节解释

  1. 边界处理:先判断df.empty,为空直接返回,避免后续代码因无数据报错。
  2. 保留首行格式:用df.iloc[[0]]而非df.iloc[0],这样得到的仍是DataFrame对象,方便后续添加新列;如果用iloc[0]会得到Series,还需额外转成DataFrame。
  3. 动态适配列数:通过列表推导式根据剩余值的数量生成列名,哪怕原DataFrame有更多行(比如4行col2值),也能自动生成col21、col22、col23这类列名。

你之前尝试的问题分析

你用iterrows的代码有几个小问题:

  • df1没有提前初始化,直接赋值会触发报错;
  • row是遍历得到的行Series对象,不是索引值,df1['col2'+row]会把Series转成字符串,导致列名完全错误;
  • 新版Pandas中append方法已被弃用,且这里其实不需要遍历整表拼接,效率更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:42:40