我试图找到正确的语法来选择 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
等等,因此需要与维度无关;切片方法似乎是实现这一目标的最自然的方式,如果可以实现,计算效率应该更高。
如果没有,可以尝试我的答案中的列表理解方法 - 但我在多维方面遇到了麻烦。
相关分类