Я не уверен, действительно ли вам нужны панды, но numpy имеет многомерную функцию гистограммы, которая называется histogramdd
.
Вот тестовый цикл, который генерирует три массива с увеличивающимся числом столбцов, все 100 строк в длину и соответствующие бинарные массивы, все с границами вашего образца сверху.
Просто посмотрите, если это то, что вы искали:
for i in range(1, 4):
data = np.random.random([100, i])
bins = np.linspace(0, 1, 6)
bins = [bins for _ in range(i)]
print('shape of data: ', np.shape(data))
print('bin borders: ',bins)
print('\nresult: ', np.histogramdd(data, bins), '\n\n')
результат:
shape of data: (100, 1)
bin borders: [array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])]
result: (array([ 14., 26., 21., 24., 15.]), [array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])])
shape of data: (100, 2)
bin borders: [array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ]), array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])]
result: (array([[ 5., 7., 5., 2., 3.],
[ 5., 4., 5., 3., 1.],
[ 5., 3., 7., 1., 3.],
[ 2., 6., 4., 3., 7.],
[ 1., 11., 3., 2., 2.]]), [array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ]), array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])])
shape of data: (100, 3)
bin borders: [array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ]), array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ]), array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])]
result: (array([[[ 1., 0., 0., 0., 2.],
[ 0., 1., 1., 1., 0.],
[ 0., 1., 1., 2., 1.],
[ 2., 2., 0., 2., 0.],
[ 1., 1., 1., 2., 1.]],
[[ 2., 0., 1., 1., 1.],
[ 0., 0., 0., 1., 0.],
[ 1., 2., 2., 0., 1.],
[ 0., 1., 1., 2., 0.],
[ 0., 0., 1., 1., 0.]],
[[ 1., 0., 0., 0., 1.],
[ 1., 0., 2., 0., 4.],
[ 0., 1., 0., 1., 1.],
[ 2., 0., 0., 0., 0.],
[ 1., 1., 0., 1., 0.]],
[[ 1., 2., 1., 1., 0.],
[ 0., 1., 1., 0., 2.],
[ 2., 1., 1., 0., 1.],
[ 2., 0., 1., 1., 0.],
[ 0., 2., 0., 2., 1.]],
[[ 1., 3., 0., 1., 0.],
[ 1., 1., 0., 0., 0.],
[ 1., 1., 0., 0., 0.],
[ 1., 1., 2., 1., 1.],
[ 1., 1., 1., 0., 1.]]]), [array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ]), array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ]), array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])])