如何在不遍历DataFrame的情况下提取含指定元素的行?
提取DataFrame中列表列包含指定元素的行
问题场景
你的DataFrame结构如下:
a b 1 frog [1, 2, 3] 2 dog [4, 5] 3 melon [6, 7, 1]
需要提取b列中包含指定数字(如1)的行,且避免手动遍历整个DataFrame。
解决方案
方法1:用Series.apply()快速筛选
直接对b列使用apply结合lambda表达式,生成布尔筛选序列:
target_num = 1 filtered_df = df[df['b'].apply(lambda x: target_num in x)]
执行后得到预期结果:
a b 1 frog [1, 2, 3] 3 melon [6, 7, 1]
方法2:矢量化判断(numpy辅助)
用numpy.vectorize包装判断逻辑,实现矢量化操作:
import numpy as np def check_in_list(_list, _tag): return _tag in _list vec_check = np.vectorize(check_in_list) target_num = 1 filtered_df = df[vec_check(df['b'], target_num)]
方法3:预转集合优化多次查询
如果需要多次查询不同数字,先将b列的列表转为集合,提升判断效率:
df['b_set'] = df['b'].apply(set) target_num = 1 filtered_df = df[df['b_set'].apply(lambda x: target_num in x)].drop('b_set', axis=1)
以上方法均无需手动遍历DataFrame,pandas会内部优化执行流程,比手动循环效率更高。
内容的提问来源于stack exchange,提问作者Jongmin Ahn
相关产品推荐
相关产品推荐

