如何用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
相关产品推荐
相关产品推荐

