Вариант использования
- Я получаю случайные наблюдения от населения.
- Затем я группирую их по bin, используя pd.cut
- Затем я извлекаю значения с помощью pd.values_counts
- Я хочу получить рассчитанный интервал меток и счетчик частоты
- Я хочу «приклеить» столбец меток к столбцу подсчетов частоты, чтобы получить 2d массив (с 2 столбцами и n интервалами)
- Я хочу преобразовать 2d массив в список для COM-взаимодействия.
Я близок к желаемому выводу, но я новичок в Python, поэтому какой-то умник может оптимизировать мой код метки.
Проблема здесь заключается в ограничении конечного вывода, который должен быть списком, чтобы его можно было распределить через слой взаимодействия COM в Excel VBA.
import inspect
import numpy as np
import pandas as pd
from scipy.stats import skewnorm
pop = skewnorm.rvs(0, size=20)
bins=[-5,-4,-3,-2,-1,0,1,2,3,4,5]
bins2 = np.array(bins)
bins3 = pd.cut(pop,bins2)
bins4 = [0]*(bins2.size-1)
#print my own labels, doh!
idx=0
for binLoop in bins3.categories:
intervalAsString="(" + str(binLoop.left)+ "," + str(binLoop.right)+"]"
print (intervalAsString)
bins4[idx]=intervalAsString
idx=idx+1
table = pd.value_counts(bins3, sort=False)
joined = np.vstack((bins4,table.tolist()))
print (joined)
Целевой вывод 2d массива, конвертируемого в список
| (-5, -4] | 0 |
| (-4, -3] | 0 |
| (-3, -2] | 0 |
| (-2, -1] | 1 |
| (-1, 0] | 3 |
| (0, 1] | 9 |
| (1, 2] | 4 |
| (2, 3] | 2 |
| (3, 4] | 1 |
| (4, 5] | 0 |