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

如何查找含整数列表列的pandas DataFrame中包含整数列的记录?isin返回空帧

解决方法:匹配包含指定整数的列表型DataFrame记录

你的问题出在isin的用法上:a['cell'].isin(b['cells'])是检查单个整数是否等于b['cells']里的整个列表(比如判断1是否等于[1,2]),显然不会匹配,所以返回空DataFrame。下面是几种可行的解决方案:

先构造示例数据(方便测试)

import pandas as pd

a = pd.DataFrame({'cell': [1, 3, 5]})
b = pd.DataFrame({'cells': [[1,2], [4,5], [2,3], [6,7]]})

方法1:展开列表后匹配(直观高效)

把b的列表列拆成单个元素,找到匹配的原记录索引,再筛选:

# 展开b的cells列,保留原索引
b_exploded = b.explode('cells')
# 提取匹配的唯一索引
matched_idx = b_exploded[b_exploded['cells'].isin(a['cell'])].index.unique()
# 获取最终结果
df_result = b.loc[matched_idx]

执行后df_result会包含b中所有包含a里整数的记录:[[1,2], [4,5], [2,3]]。


方法2:逐行检查列表元素(灵活)

先把a的整数转成集合(加快查询速度),再对b的每行列表做存在性检查:

a_values = set(a['cell'])
# 标记每行是否有匹配的整数
b['has_match'] = b['cells'].apply(lambda x: any(num in a_values for num in x))
# 筛选结果并删除辅助列
df_result = b[b['has_match']].drop('has_match', axis=1)

这个方法适合列表长度较短的场景,代码可读性强。


方法3:向量化操作(大数据量优化)

如果数据量很大,apply效率偏低,可以用numpy广播实现批量检查:

import numpy as np

# 处理不等长列表:填充到最大长度
max_len = b['cells'].str.len().max()
b_arr = np.array([np.pad(x, (0, max_len - len(x)), mode='constant') for x in b['cells']])
a_arr = a['cell'].to_numpy()

# 批量检查每个列表是否包含a中的整数
matches = np.any(np.isin(b_arr, a_arr), axis=1)
df_result = b[matches]

这种方法利用numpy的向量化运算,比循环/apply快很多,适合百万级以上的数据量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:57:14