如何基于df2的B、C列条件筛选df1的行生成新DataFrame df3
嗨,我来帮你搞定这个需求!要从df1里筛选出和df2的B、C列完全匹配的行,生成新的DataFrame df3,有两种实用的pandas方法,我给你详细拆解下:
方法1:使用merge(推荐,逻辑清晰效率高)
merge是pandas处理数据匹配的利器,咱们可以指定以B和C列为匹配键,只保留df1中能和df2匹配上的行:
import pandas as pd # 假设df1和df2已经是现成的DataFrame df3 = pd.merge(df1, df2[["B", "C"]], on=["B", "C"], how="inner")
这里只取df2的B、C列来做匹配(避免引入df2的其他无关列),how="inner"会只保留两边都匹配成功的行,最终得到的df3就是你想要的结果。
方法2:用isin结合元组做行级判断
如果不想用merge,咱们可以把df2的B、C列组合成元组集合,然后直接判断df1的每一行是否符合匹配条件:
# 先把df2的B、C列打包成元组集合,方便快速查找 match_combinations = set(zip(df2["B"], df2["C"])) # 筛选df1中B、C组合在集合里的行 df3 = df1[df1.apply(lambda row: (row["B"], row["C"]) in match_combinations, axis=1)]
这种方法更直观,适合小数据集;但如果数据量很大,merge的效率会更高哦。
另外要注意:如果df2里有重复的B、C组合,merge会把df1中对应的行重复匹配;而第二种方法会保留df1里的原行数,只要匹配成功就保留。
内容的提问来源于stack exchange,提问作者Tie_24
相关产品推荐
相关产品推荐

