如何合并DataFrame并删除与region不匹配的非目标价格列
解决DataFrame关联后保留匹配区域价格列的问题
输入数据
先明确两个输入的DataFrame(基于pandas):
import pandas as pd df1 = pd.DataFrame({ "ID": [1], "region": ["GBR"], "Fruit": ["Apple"] }) df2 = pd.DataFrame({ "ID": [1], "GBR_Price": [12], "EUR_Price": [15], "US_Price": [8] })
需求说明
将两个DataFrame按ID关联后,仅保留与df1['region']匹配的价格列,删除其他区域的价格列,最终得到包含ID、region、匹配价格列、Fruit的结果。
原代码的问题
你尝试的代码存在多处语法错误:
join方法的关联条件写法错误,应使用on='ID'而非df1.ID = df2.ID- 存在大小写错误(
df2.id应为df2['ID']) - 正则表达式中直接嵌入变量
df1.region的方式无效,且括号不匹配 drop方法的使用逻辑混乱,无法正确筛选要删除的列
正确实现方法
方法一:合并后直接筛选目标列
这种方式更直观,先合并再保留需要的列:
# 按ID内连接两个DataFrame merged_df = df1.merge(df2, on='ID', how='inner') # 获取当前需要保留的价格列名 target_price_col = f"{merged_df['region'].iloc[0]}_Price" # 筛选出最终需要的列 final_df = merged_df[df1.columns.tolist() + [target_price_col]]
执行后输出结果:
ID region Fruit GBR_Price 0 1 GBR Apple 12
方法二:合并后删除多余价格列
如果df2包含大量区域价格列,可先合并再批量删除不符合的列:
merged_df = df1.merge(df2, on='ID', how='inner') target_region = merged_df['region'].iloc[0] # 筛选出所有需要删除的非目标价格列 cols_to_drop = [col for col in merged_df.columns if col.endswith('_Price') and not col.startswith(target_region)] # 删除多余列得到结果 final_df = merged_df.drop(cols_to_drop, axis=1)
注意事项
如果df1包含多行不同region的数据,上述单行取值的方式不适用,可改用apply逐行处理或分组匹配,具体逻辑需根据实际数据结构调整。
内容的提问来源于stack exchange,提问作者shamil ray
相关产品推荐
相关产品推荐

