【发布时间】:2016-11-25 16:23:45
【问题描述】:
我有一个 Pandas 数据框,其中包含一堆按排序顺序排列的值:
df = pd.DataFrame(np.arange(1,21))
我想得到一个像这样的列表/数组:
[0,1.62,4.58,7.54,10.5,13.45,16.4,19.37,20]
第一个和最后一个元素是df.min()和df.max(),中心元素是数据框的df.mean(),周围元素都是0.5*df.std()的增量
有没有办法对大型 DataFrame 进行矢量化?
更新(有效的方法在下面的答案中!)
a = np.arange(df[0].mean(),df[0].min(),-0.5*df[0].std())
b = np.arange(df[0].mean(),df[0].max(),0.5*df[0].std())
c = np.concatenate((a,b))
c = np.append(c,[df[0].min(),df[0].max()])
c = np.unique(c)
然后使用np.digitize() 将值移动到适当的容器中。
如果您找到更有效的方法,那将很有帮助!
【问题讨论】:
-
分享你的循环实现?
-
@Divakar,添加代码示例
-
不确定我是否假设有问题,但该代码无法运行,是吗?抛出错误:
if x > df.min():? -
是的,我意识到那是很糟糕的代码,所以才到控制台进行测试。太糟糕了,无法跟上,所以我将其删除,下次有机会时会添加到问题中:/对不起!
-
@piRSquared 抱歉,这是一个愚蠢的错字。你能看看我提出的更新的解决方案,看看是否有意义?
标签: python numpy pandas dataframe vectorization