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

使用字典过滤DataFrame行触发TypeError,求解决方法

解决DataFrame.query中字典索引Series导致的TypeError问题

你遇到的TypeError: unhashable type: 'Series'是因为df.query()语句里的user_id是一个Series对象,而字典的键必须是可哈希的原子类型(比如整数、字符串),无法直接用Series作为字典的索引。

下面是两种可行的解决方法:

方法一:用map映射阈值后直接筛选

通过map方法把每个user_id对应的阈值从字典中取出来,再和val1做比较筛选:

import pandas as pd
d={'user_id':[1,1,2,2,2,3,3],'val1':[101,102,103,104,105,106,107]}
df = pd.DataFrame(data=d)
min_val_dict={1:101,2:103,3:102}

# 映射阈值并筛选
filtered_df = df[df['val1'] > df['user_id'].map(min_val_dict)]
print(filtered_df)

运行结果:

user_id  val1
1        1   102
3        2   104
4        2   105
5        3   106
6        3   107

方法二:先添加临时阈值列再用query

如果偏好使用query语法,可以先把阈值映射为DataFrame的一列,再执行筛选,最后删除临时列:

import pandas as pd
d={'user_id':[1,1,2,2,2,3,3],'val1':[101,102,103,104,105,106,107]}
df = pd.DataFrame(data=d)
min_val_dict={1:101,2:103,3:102}

# 添加临时阈值列
df['min_val'] = df['user_id'].map(min_val_dict)
# 用query筛选后删除临时列
filtered_df = df.query('val1 > min_val').drop('min_val', axis=1)
print(filtered_df)

运行结果和方法一一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:20:50