如何仅使用 Pandas 执行矢量化分箱

我试图找到正确的语法来选择 Pandas DataFrame 中的一行切片,条件是多维切片。


我想通过在多维 numpy 数组中提供 bin 并矢量比较记录是否适合一个 bin 或另一个 bin 来执行直方图分箱。结果应该是一个 1 维 numpy 数组,其中包含每个 bin 中的项目数。


我最初的模型尝试如下,以供参考,尽管我已经在下面的答案中提供了部分实现(使用循环代替):


import numpy as np

import pandas as pd


## Generate Random Data

X = np.random.normal(0.5,0.1,100)


## Populate a Pandas DataFrame

DF = pd.DataFrame({'x':X})


## Some example, hardcoded 1D bins. 

bins = np.array([

                [[0.0,0.2]],

                [[0.2,0.4]],

                [[0.4,0.6]],

                [[0.6,0.8]],

                [[0.8,1.0]]

                ])


hist = np.zeros(shape=(4,))

hist[:] = np.sum(

                 DF.loc[   (DF >= bins[:,:,0]) &

                           (DF > bins[:,:,1])

                        ].dropna(how='all')

                 )

通常,数据是 n 维的,并且 bin 遵循上述模式,其中:


[[x_min, x_max], [y_min, ymax], [z_min, z_max]] 

对于每个 bin(因此在上面的 1D 示例中存在明显的“额外”嵌套层)。因此切片应该适用于多列的数据帧,这样


DF['x'] >= x_min and DF['x'] < x_max and 

DF['y'] >= y_min and DF['y'] < y_max

等等,因此需要与维度无关;切片方法似乎是实现这一目标的最自然的方式,如果可以实现,计算效率应该更高。


如果没有,可以尝试我的答案中的列表理解方法 - 但我在多维方面遇到了麻烦。


慕码人2483693
浏览 160回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python