使用字典过滤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
相关产品推荐
相关产品推荐

