如何通过指定数值/类别列表筛选Vaex数据集
问题描述
举个例子,我有如下数据集(模拟随机数据):
| Index | category | value |
|---|---|---|
| 1 | dog | 5 |
| 2 | cat | 22 |
| 3 | Tasselled Wobbegong | 44 |
| 4 | cat | 66 |
| 5 | Tasselled Wobbegong | 5 |
| 6 | dog | 23 |
上述数据存储在vaex dataframe中。实际使用场景中可能存在多达10000个类别,而非示例中的3个。我希望通过指定的类别列表筛选vaex dataframe,预期实现逻辑类似如下代码:
filter_category_list = ['cat','dog'] df = df[df.category in filter_category_list ]
上述代码无法正常运行,仅为我预期的写法参考
我期望得到的筛选输出结果如下:
| Index | category | value |
|---|---|---|
| 1 | dog | 5 |
| 2 | cat | 22 |
| 4 | cat | 66 |
| 6 | dog | 23 |
请问该如何在vaex中实现上述筛选需求?
解决方案
Vaex 表达式内置isin方法专门处理这类多值匹配筛选,性能优异,哪怕筛选列表包含上万个类别也能高效运行,不会额外占用过多内存。
直接使用下面的写法即可得到预期结果:
filter_category_list = ['cat', 'dog'] df_filtered = df[df.category.isin(filter_category_list)]
如果需要做反向筛选(保留不在目标列表内的类别),在判断条件前加~取反即可:
df_exclude = df[~df.category.isin(filter_category_list)]
注意:不要直接使用Python原生的in关键字编写筛选条件,Vaex的延迟计算表达式不支持这种原生语法,必须调用内置的isin方法才能生成正确的筛选计算逻辑。
内容的提问来源于stack exchange,提问作者Matan
相关产品推荐
相关产品推荐

