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

如何对比两个DataFrame并筛选匹配用户数据的绘图索引

解决DataFrame筛选绘图索引的TypeError问题

问题场景

现有两个DataFrame:

  • 默认配置表def_df:每行对应一个绘图索引,行内元素为该绘图依赖的数据列名
    import pandas as pd
    def_df = pd.DataFrame([['alpha','beta'],['gamma','delta'],['ray','kite']],index=['ab_plot','gd_plot','rk_plot'])
    
    数据结构:
    0      1
    ab_plot   alpha   beta
    gd_plot   gamma  delta
    rk_plot     ray   kite
    
  • 用户数据表user_df:索引为用户已提供的数据列名
    user_df = pd.DataFrame([10,20],index=['alpha','beta'])
    
    数据结构:
    0
    alpha  10
    beta   20
    

需求:筛选出def_df中整行所有元素都存在于user_df索引中的绘图索引,预期结果为['ab_plot']

错误原因分析

你之前的代码触发TypeError: unhashable type: 'numpy.ndarray',是因为遍历数据时,每个待判断的x是一行数据对应的numpy数组,数组属于不可哈希类型,无法直接用in判断是否在字符串集合(如列名)中。

正确实现方法

方法一:利用pandas内置方法(简洁高效)

通过isin生成布尔矩阵,再按行判断所有元素是否符合条件:

# 获取用户提供的列名集合
user_cols = user_df.index

# 生成每行的布尔判断:整行元素是否都在用户列名中
mask = def_df.isin(user_cols).all(axis=1)

# 提取符合条件的绘图索引
target_plots = mask[mask].index.tolist()
print(target_plots)  # 输出: ['ab_plot']

方法二:自定义逐行检查(灵活可控)

如果需要更复杂的判断逻辑,可以用apply结合自定义逻辑:

user_cols = set(user_df.index)  # 转集合提升查找效率

# 逐行检查所有元素是否在用户列名中
mask = def_df.apply(lambda row: all(col in user_cols for col in row), axis=1)

target_plots = mask[mask].index.tolist()
print(target_plots)  # 输出: ['ab_plot']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:50:52