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

Pandas中如何用一个数据集的字段值筛选另一个数据集

问题背景

现有三个pandas DataFrame数据集,结构如下:

  1. df_dict1结构:
CodeCityStateQTY
110001Los AngelesCA0
110002HoustonTX0
110003New YorkNY0
.........0
999999FresnoCA0
  1. df_dict2结构:
CodeCityStateQTY
220001San DiegoCA304
220002AustinTX200
220003AlbanyNY2004
.........3220
888888San FranciscoCA320
  1. 待拆分的主表df结构:
CodeDateCityStateCases
1100012021-01-01Los AngelesCA112
1100012021-01-02Los AngelesCA123
1100022021-01-01HoustonTX1112
...............
8888882021-01-01San FranciscoCA1234
9999992021-01-01FresnoCA1113

需求为将df按Code列拆分为两个独立DataFrame:

  • df_filtered1:包含df中所有Code存在于df_dict1['Code']的行
  • df_filtered2:包含df中所有Code存在于df_dict2['Code']的行

实现方案

直接用pandas内置的isin()方法做布尔索引筛选即可,性能好、写法简洁,不需要逐行循环判断。

# 提取两个参考表的Code列作为匹配依据
code_set1 = set(df_dict1['Code'])
code_set2 = set(df_dict2['Code'])

# 按条件筛选拆分
df_filtered1 = df[df['Code'].isin(code_set1)]
df_filtered2 = df[df['Code'].isin(code_set2)]

注意事项

  • 将Code列转为集合再传入isin()不是强制要求,但数据量较大时,集合的成员判断速度远快于列表,能明显提升筛选效率
  • 如果两个参考表的Code列和主表df的Code列数据类型不一致(比如一边是整数、一边是字符串),先统一数据类型再做匹配,否则会出现匹配失效的问题,统一类型写法示例:df['Code'] = df['Code'].astype(str)
  • 如果df_dict1和df_dict2的Code值没有重叠,拆分完成后可以用下面的代码校验结果是否正确:
# 校验拆分后行数总和与原表是否一致
print(len(df_filtered1) + len(df_filtered2) == len(df))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:39:50