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

如何使用Pandas通过列名用一个DataFrame过滤另一个DataFrame?

Pandas通过列名实现DataFrame过滤

假设你有两个DataFrame:

  • df_filter: 用作过滤条件的DataFrame(对应你说的"此DataFrame")
  • df_target: 需要被过滤的DataFrame(对应你说的"彼DataFrame")

以下是几种实用的过滤实现方式:

1. 保留目标DataFrame中列值匹配过滤DataFrame的行

使用isin()方法检查目标列的值是否存在于过滤DataFrame的对应列中,再通过布尔索引筛选行:

import pandas as pd

# 示例数据
df_filter = pd.DataFrame({'用户ID': [101, 103, 105]})
df_target = pd.DataFrame({'用户ID': [101, 102, 103, 104, 105, 106], '订单金额': [200, 150, 300, 250, 400, 180]})

# 执行过滤:保留df_target中用户ID在df_filter里的行
filtered_result = df_target[df_target['用户ID'].isin(df_filter['用户ID'])]

2. 排除目标DataFrame中列值匹配过滤DataFrame的行

在布尔索引前加~取反,即可排除匹配的行:

# 执行过滤:排除df_target中用户ID在df_filter里的行
filtered_result_exclude = df_target[~df_target['用户ID'].isin(df_filter['用户ID'])]

3. 多列联合匹配过滤

如果需要通过多个列的组合值进行过滤,可以使用merge()方法,指定how='inner'只保留两边完全匹配的行:

# 示例多列数据
df_filter = pd.DataFrame({'用户ID': [101, 103], '订单类型': ['实物', '虚拟']})
df_target = pd.DataFrame({'用户ID': [101, 102, 103, 104], '订单类型': ['实物', '虚拟', '实物', '虚拟'], '订单金额': [200, 150, 300, 250]})

# 多列联合过滤:保留用户ID和订单类型都匹配的行
filtered_result_multi = pd.merge(df_target, df_filter, on=['用户ID', '订单类型'], how='inner')

内容的提问来源于stack exchange,提问作者RECEP TAYYİP DURGUT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:18:18