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

如何从df1提取与df2匹配的数据并保留df1的DataFrame结构

从两个结构不同的DataFrame提取交集并保留指定结构

现有两个结构不同的DataFrame:

  • df1包含列a、b、c、d、e,数据如下:
a         b     c    d           e
orange    7     21   high       sweet
apple     9     44   very high  sweet
lemon     3     13   low        sour
  • df2仅包含列a、b、c,数据如下:
a         b     c
orange    7     21
apple     9     44

需求:创建新DataFrame df3,保留df1中与df2在a、b、c三列完全匹配的行,且结构与df1一致,最终结果如下:

a         b     c    d           e
orange    7     21   high       sweet
apple     9     44   very high  sweet

方法一:使用merge函数(推荐)

利用pandas的merge函数,直接指定共同匹配列,取内连接(交集)即可,自动保留df1的全部列结构:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'a': ['orange', 'apple', 'lemon'],
    'b': [7, 9, 3],
    'c': [21, 44, 13],
    'd': ['high', 'very high', 'low'],
    'e': ['sweet', 'sweet', 'sour']
})

df2 = pd.DataFrame({
    'a': ['orange', 'apple'],
    'b': [7, 9],
    'c': [21, 44]
})

# 执行合并,按a、b、c三列匹配,取交集
df3 = pd.merge(df1, df2, on=['a', 'b', 'c'], how='inner')
print(df3)

方法二:使用布尔索引筛选

将df2的a、b、c列转为元组集合,再筛选df1中符合条件的行:

import pandas as pd

# 构造示例数据(同上)
df1 = pd.DataFrame({
    'a': ['orange', 'apple', 'lemon'],
    'b': [7, 9, 3],
    'c': [21, 44, 13],
    'd': ['high', 'very high', 'low'],
    'e': ['sweet', 'sweet', 'sour']
})

df2 = pd.DataFrame({
    'a': ['orange', 'apple'],
    'b': [7, 9],
    'c': [21, 44]
})

# 将df2的三列转为元组集合
matched_tuples = set(df2.apply(tuple, axis=1))
# 筛选df1中匹配的行
df3 = df1[df1[['a', 'b', 'c']].apply(tuple, axis=1).isin(matched_tuples)]
# 可选:重置索引
df3 = df3.reset_index(drop=True)
print(df3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:28