如何筛选pandas索引匹配另一DataFrame任意位置值的行?
问题描述
需要从mrna_kirp数据框中筛选出索引值在gmt_c4数据框任意位置(行索引元组元素、列名、单元格值)出现的行。原代码:
mrna_subset = mrna_kirp.loc[mrna_kirp.index.isin(gmt_c4)]
无法满足需求,因为该写法仅匹配gmt_c4的列标签,而非整个数据框内的所有值。
解决方案
核心思路是先提取gmt_c4中所有出现过的唯一值(包括行索引元组的每个元素、列名、单元格值),再用这些值匹配mrna_kirp的索引:
# 提取gmt_c4所有位置的元素并去重 # 收集列名 col_values = set(gmt_c4.columns) # 收集行索引元组中的所有元素 index_values = set() for idx_tuple in gmt_c4.index: index_values.update(idx_tuple) # 收集单元格值 cell_values = set(gmt_c4.values.flatten()) # 合并为完整的匹配集合 all_match_values = col_values.union(index_values).union(cell_values) # 筛选目标行 mrna_subset = mrna_kirp.loc[mrna_kirp.index.isin(all_match_values)]
示例验证
在提供的示例数据中:
gmt_c4的行索引元组包含A1BG、A1CF、A2BP1这些值- 这些值会被加入到
all_match_values集合中 - 最终筛选出
mrna_kirp中索引为A1BG、A1CF、A2BP1的行,与期望输出一致。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

