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

时间:2014-08-21 17:51:51

标签: python pandas

说我有一个数据框:

this_is_my_dataframe_with_a_long_name

我想找到条件为True的索引。例如,假设条件是column等于value

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

dataframe_with_a_long_name[dataframe_with_a_long_name['column'] =='A].index

这让我想知道:

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

  2. 运行此查询还有更强大的简洁方法吗?例如,idxmin()允许直接查询索引的最小值(一个方法调用)。在条件为True的条件下检索索引是否有等价物? e.g:

    data_frame_with_a_long_name['column' == 'A'].true_indices()
    

1 个答案:

答案 0 :(得分:5)

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

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

编辑:

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

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