在视频[使用pandas进行Python数据分析](http://youtu.be/w26x-z-BdWQ?t=2h14s)中,Wes McKinney展示了一系列方法名为searchsorted()的函数,该函数给出一个值,并返回序列跨越该值的索引。似乎这个函数现在不再可用,有其他替代品吗?
我认为这是由于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
Pandas
中没有searchsorted
方法,但是在numpy
中有一个:http://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html,你是不是把它和这个混淆了? - EdChumdf.prop.cumsum().searchsorted
,这似乎是一个序列方法。 - idodaPandas 0.12
或Numpy 1.6/1.7
以来发生的变化,在Pandas 0.13.1
中,您不能再这样做了,正如您所发现的那样,您需要执行np.searchsorted(df.prop.cumsum().values, my_new_value)
,这不太优雅。这可能与Pandas Series现在从NDFrame
而不是ndarray
继承有关,因此您现在失去了这个语法糖。 - EdChumdf.prop.values.cumsum().searchsorted
而不是我之前提出的方法,我同意这种方法不够优雅,但在所有这些决策背后都有一个设计决策,这不会轻易被做出。 - EdChum