合并后移除右侧DataFrame键列并优化列名的优雅实现
Pandas合并后自动去右侧键列+规范列名的简洁方法
给你两种贴合需求的简洁实现方式:
一、实现「较好」的列名:id、user_id、name
利用合并时的suffixes参数标记重复列,再批量删除右侧的键列,不用手动指定列名:
import pandas as pd users = pd.DataFrame({"id": [1,2,3], "name": ["Mark", "Elon", "Jeff"]}) orders = pd.DataFrame({"id": [1,2,3,4,5,6], "user_id": [2,3,2,1,1,3]}) # 合并时给右侧重复列加后缀_y,左侧保留原列名 orders_full = pd.merge(left=orders, right=users, how="left", left_on="user_id", right_on="id", suffixes=('', '_y')) # 批量删除所有带_y后缀的右侧键列 orders_full = orders_full.drop(columns=[col for col in orders_full.columns if col.endswith('_y')])
二、实现「更优」的列名:order_id、user_id、user_name
提前给表的列名做规范,从根源避免重复列,合并后直接得到目标结构:
import pandas as pd users = pd.DataFrame({"id": [1,2,3], "name": ["Mark", "Elon", "Jeff"]}) orders = pd.DataFrame({"id": [1,2,3,4,5,6], "user_id": [2,3,2,1,1,3]}) # 提前规范列名,消除歧义 users = users.rename(columns={"id": "user_id", "name": "user_name"}) orders = orders.rename(columns={"id": "order_id"}) # 直接按user_id合并,无需后续处理 orders_full = pd.merge(left=orders, right=users, how="left", on="user_id")
两种方法都不用手动逐个删改列,第一种适合快速处理、保留原有核心列名的场景;第二种通过提前规范命名,让数据结构更清晰,后期维护更方便。
内容的提问来源于stack exchange,提问作者Victor Mayrink
相关产品推荐
相关产品推荐

