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

如何用assign函数将Series添加到DataFrame左侧并保留原顺序?

解决方案

先明确核心问题

你的代码里变量名是name,和问题描述的names不一致,先统一为names;另外要解决两个关键需求:让姓氏和原DataFrame的行正确匹配、把姓氏列放到最左侧且保留原行顺序。

分步解决

1. 利用索引对齐添加姓氏列

pandas会自动根据索引匹配行,不管Series的顺序如何,都能把姓氏对应到正确的人身上,用assign添加列:

import pandas as pd

# 修正变量名并初始化数据
names = pd.DataFrame({'name': ['Max', 'Andre', 'Albert'],
     'country': ['Germany', 'France', 'Germany']}, 
      index= ['Max', 'Andre', 'Albert'])

surname = pd.Series(['Ampere', 'Einstein', 'Planck'],
               index = ("Andre", "Albert", "Max"))

# 添加surname列,自动按索引匹配行
names_with_surname = names.assign(surname=surname)

2. 调整列顺序到左侧

assign默认把新列加到最后,手动指定列顺序就能把surname放到最前面:

# 构造新列顺序:先放surname,再放原DataFrame的所有列
new_cols = ['surname'] + list(names.columns)
names_final = names_with_surname[new_cols]

一步到位的简化写法

不想拆分步骤的话,直接合并成一行:

names_final = names.assign(surname=surname)[['surname'] + list(names.columns)]

最终结果验证

运行后names_final的输出如下,完全符合需求:

surname    name  country
Max        Planck     Max  Germany
Andre      Ampere   Andre   France
Albert  Einstein  Albert  Germany

为啥之前会失败?

  • 没利用索引对齐:如果手动按顺序塞值,会因为surname的索引顺序和原DataFrame不同导致错位
  • 没调整列顺序:assign默认把新列放最后,必须手动指定顺序才能移到左侧

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:35:17