Pandas筛选符合条件列值报错,如何获取自动挡近两年生产车型型号
Pandas筛选近两年自动挡汽车型号的代码修正方案
错误原因
- 第一个
SyntaxError是因为Python/Pandas的布尔索引逻辑与运算符为单个&,不是其他语言常用的&&,你后续的修改方向是对的。 - 第二个
TypeError是因为左侧df[['year']].drop_duplicates().nlargest(2, 'year')返回的是包含前两大年份的DataFrame对象,不是和原数据行数一致的布尔掩码,无法直接和右侧布尔序列做按位与运算。
正确实现代码
# 提取所有年份中最大的两个年份值,转成列表 latest_two_years = df['year'].drop_duplicates().nlargest(2).tolist() # 同时满足:年份属于近两年、变速箱类型为自动,筛选对应型号 auto_model = df.loc[ (df['year'].isin(latest_two_years)) & (df['Sparetype'] == 'Automatic'), 'model' ]
如果需要返回去重后的唯一型号,可以在末尾追加.drop_duplicates():
unique_auto_model = df.loc[ (df['year'].isin(latest_two_years)) & (df['Sparetype'] == 'Automatic'), 'model' ].drop_duplicates()
逻辑说明
用isin()方法判断每行的year值是否属于前两大年份列表,返回和原数据行数一致的布尔序列,和变速箱类型判断的布尔序列用&合并后,即可正确筛选出符合要求的行,最终提取model列即可。注意两个布尔条件必须用小括号包裹,避免运算符优先级导致的计算错误。
内容的提问来源于stack exchange,提问作者Hala Abbas
相关产品推荐
相关产品推荐

