使用pandas df.query()对分类(时间间隔)列进行过滤

时间:2019-06-22 02:24:28

标签: python pandas

我想用dataframeobject interval列过滤category。我想根据多个条件进行过滤。我该如何处理interval category数据?

query函数返回多个间隔。

>>> my_df
        vtype   velocity_bin
0         car  (-0.001, 5.0]
1         car    (5.0, 10.0]
2         car    (10.0, inf]
3  motorcycle  (-0.001, 5.0]
4  motorcycle    (5.0, 10.0]
>>> my_df.dtypes
vtype             object
velocity_bin    category
dtype: object
>>> my_df.query('vtype == "car" & velocity_bin == (5, 10)')
  vtype   velocity_bin
0   car  (-0.001, 5.0]
1   car    (5.0, 10.0]

我希望输出为

  vtype   velocity_bin
1   car    (5.0, 10.0]

1 个答案:

答案 0 :(得分:3)

您的“ velocity_bin”列由Interval对象组成。这会带来一定程度的挑战,因为query并不容易支持它。

作为惯用的解决方案,我建议

df[(df['vtype'] == 'car') & (df['velocity_bin'] == pd.Interval(5, 10))]

但是,与其他任何方法一样,您可以结合使用query解决方案。使用"python"引擎并将“ velocity_bin”转换为字符串以进行字符串比较,我们有

df.query(
    'vtype="car" and velocity_bin.astype("str") == "(5.0, 10.0]"', engine='python')