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

如何合并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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:40:09