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

