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

