条件为真的索引.效率和简洁

Ame*_*ina 1 python pandas

假设我有一个数据帧:

this_is_my_dataframe_with_a_long_name
Run Code Online (Sandbox Code Playgroud)

我想找到条件所在的指数True.例如,假设条件column等于value.

我知道我可以在技术上做到:

dataframe_with_a_long_name[dataframe_with_a_long_name['column'] =='A].index
Run Code Online (Sandbox Code Playgroud)

这让我想知道:

  1. 以上是检索这些指数的最有效方法吗?请注意,上面的代码创建了True/False值的临时副本,使用此输出索引数据帧,然后检索生成的视图的索引.

  2. 是否有更简洁的方式来运行此查询?例如, idxmin()允许一个人直接查询索引的最小值(一个方法调用).是否有任何等价物来检索条件所在的指数True?例如:

    data_frame_with_a_long_name['column' == 'A'].true_indices()
    
    Run Code Online (Sandbox Code Playgroud)

chr*_*isb 5

在普通的熊猫中,这可能是编写它的最佳方式.随着Dataframe变大,使用更新的查询方法可能会有一些加速,这通常会更简洁,特别是考虑到更长的Dataframe名称.

In [154]: df = pd.DataFrame(np.random.rand(10000000), columns=['a'])

In [155]: %timeit df[df['a'] < .25].index
10 loops, best of 3: 154 ms per loop

In [156]: %timeit df.query('a < .25').index
1 loops, best of 3: 129 ms per loop
Run Code Online (Sandbox Code Playgroud)

编辑:

正如@Jeff所说,如果你只需要索引,那么最快的路径就是:

In [160]: %timeit df.index[df['a'] < .25]
10 loops, best of 3: 81.6 ms per loop
Run Code Online (Sandbox Code Playgroud)

  • 如果你只需要索引,那么``df.index [df ['a'] <0.25]``将是最快的. (2认同)