Pandas筛选Category列含'Insulated'的行失败,求解决方案
解决Pandas分组后筛选数组列的问题
问题原因
你分组时用了agg({'Category': 'unique'}),导致binned里的Category列每个值都是数组/列表,不是单个字符串:
.str.contains('Insulated')是针对字符串列的方法,对数组列会返回NaN,因为无法识别数组类型binned[binned['Category'].isin(...)]是检查整个数组是否完全等于列表里的某一项,而不是数组里是否包含列表中的元素,所以自然找不到匹配行
解决方案
方法1:直接检查数组内的元素(推荐)
用apply遍历每个数组,判断是否包含目标类别:
# 筛选包含'Insulated Down'或'Insulated Synthetic'的行 filtered = binned[binned['Category'].apply(lambda arr: any(cat in ['Insulated Down', 'Insulated Synthetic'] for cat in arr))] # 如果要筛选所有包含'Insulated'关键字的类别(不管是Down还是Synthetic) filtered = binned[binned['Category'].apply(lambda arr: any('Insulated' in cat for cat in arr))]
方法2:先展开数组再筛选
如果需要查看每个类别对应的Bin Location细节,可以先把数组列展开成多行,再筛选:
# 将Category数组展开,每个类别单独占一行 unbinned_df = binned.explode('Category') # 筛选目标类别 filtered_unbinned = unbinned_df[unbinned_df['Category'].isin(['Insulated Down', 'Insulated Synthetic'])] # 如果需要回到按Bin Location分组的结果,去重即可 filtered = filtered_unbinned.drop_duplicates('Bin Location')
验证结果
可以先运行print(binned['Category'].head())查看列的结构,确认是数组类型后,再执行筛选代码验证结果。
内容的提问来源于stack exchange,提问作者Ryan Barnett
相关产品推荐
相关产品推荐

