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

如何用Pandas从第二个DataFrame过滤原DataFrame两列值并保留索引

解决方案:按(X,Y)配对过滤DataFrame并保留原ID索引

我来帮你搞定这个需求——要根据第二个DataFrame里的(X,Y)配对组合,过滤第一个DataFrame,同时保留原ID索引,这里有两种实用的pandas方法:

方法一:使用merge(高效适合大数据量)

merge是pandas里处理多列匹配的利器,通过内连接(inner join)可以精准筛选出同时存在于两个DataFrame的(X,Y)配对:

# 先把原DataFrame的ID索引转回列(方便merge匹配)
df_reset = df.reset_index()
# 按X、Y列做内连接,只保留匹配的行
merged_df = df_reset.merge(df2, on=['X', 'Y'], how='inner')
# 再把ID设回索引,只保留X、Y列
result = merged_df.set_index('ID')[['X', 'Y']]

运行这段代码后,得到的结果就和你期望的一致:

X   Y
ID       
1    2  23
2   30   2
2    2   5
3    4  90

方法二:使用元组配对+isin(代码简洁直观)

如果不想折腾索引的转换,可以把每一行的(X,Y)转成元组,直接用isin判断是否存在于df2的配对列表中:

# 把df2的X、Y列转成元组列表
target_pairs = list(df2.itertuples(index=False, name=None))
# 过滤原DataFrame中(X,Y)配对在目标列表里的行
result = df[df.apply(lambda row: (row['X'], row['Y']) in target_pairs, axis=1)]

这个方法直接在已设ID为索引的df上操作,输出结果和方法一完全相同。

两种方法对比

  • merge方法:底层是向量化操作,处理十万级以上的数据时效率更高,推荐用于大数据场景。
  • apply+lambda方法:代码更简洁易懂,适合小数据量或者快速验证需求的场景,但大数据量下速度会慢一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:42:14