什么Series方法取代了searchsorted?

5
在视频[使用pandas进行Python数据分析](http://youtu.be/w26x-z-BdWQ?t=2h14s)中,Wes McKinney展示了一系列方法名为searchsorted()的函数,该函数给出一个值,并返回序列跨越该值的索引。似乎这个函数现在不再可用,有其他替代品吗?

这是哪个视频? - EdChum
Pandas中没有searchsorted方法,但是在numpy中有一个:http://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html,你是不是把它和这个混淆了? - EdChum
1
在这个视频中的2:00:21处,他使用了 df.prop.cumsum().searchsorted,这似乎是一个序列方法。 - idoda
1
这看起来像是自Pandas 0.12Numpy 1.6/1.7以来发生的变化,在Pandas 0.13.1中,您不能再这样做了,正如您所发现的那样,您需要执行np.searchsorted(df.prop.cumsum().values, my_new_value),这不太优雅。这可能与Pandas Series现在从NDFrame而不是ndarray继承有关,因此您现在失去了这个语法糖。 - EdChum
肯定不太优雅...可惜了。 - idoda
我已经编辑了我的回答,你需要执行df.prop.values.cumsum().searchsorted而不是我之前提出的方法,我同意这种方法不够优雅,但在所有这些决策背后都有一个设计决策,这不会轻易被做出。 - EdChum
1个回答

7

我认为这是由于Pandas 0.13.0中进行的重构造成的,其中Pandas Series现在是子类NDFrame而不是ndarray,请参见此处

In [33]:

import pandas as pd
import numpy as np
df = pd.DataFrame({'a':arange(10)})
df
Out[33]:

   a
0  0
1  1
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9

[10行 x 1列]

[10 rows x 3 columns]
In [28]:

# you now have to call `.values` to return a ndarray 
df.a.values.cumsum().searchsorted(11)
Out[28]:
5

现在我们来比较一下使用numpy数组的情况:

In [29]:

temp = np.array(arange(10))

In [32]:

temp.cumsum().searchsorted(11)
Out[32]:
5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接