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

如何将Pandas DataFrame两行值合并为新行并设置列名?

问题解决与实现方案

错误原因分析

你执行df = df.columns.astype(str)后,df变量被替换成了Index对象(原DataFrame列名转字符串后的索引),不再是原来的DataFrame,因此后续调用df.loc[0]会触发AttributeError——Index类型没有loc属性。这是代码中的核心问题。

符合Pandas风格的实现方法

以下是几种简洁高效的实现方式,完全满足你的需求:

方法1:列表推导式生成新列名

# 提取第一行数据,用于和原列名拼接
row0 = df.iloc[0]
# 生成新列名:第一行值 + 下划线 + 原列名
new_columns = [f"{val}_{col}" for val, col in zip(row0, df.columns)]
# 构建新DataFrame:保留第二行数据,重命名列,重置索引
new_df = df.iloc[1:].rename(columns=dict(zip(df.columns, new_columns))).reset_index(drop=True)
# 保持索引列名称为'index'
new_df.index.name = 'index'

方法2:矢量化操作(更简洁)

利用Pandas的矢量化特性,避免显式循环:

# 矢量化拼接生成新列名
new_columns = df.iloc[0].astype(str) + '_' + df.columns.astype(str)
# 构建新DataFrame并设置列名、重置索引
new_df = df.iloc[1:].set_axis(new_columns, axis=1).reset_index(drop=True)
new_df.index.name = 'index'

效果验证

原DataFrame结构:

index12
0string1string2
1int_val1int_val2

执行代码后得到的新DataFrame:

indexstring1_1string2_2
0int_val1int_val2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:53:24