Я пытаюсь скопировать данные
def binned(cols, bins, labels):
"""helper method that puts proper bin values in proper rows of pandas df"""
for col in cols:
yield ('{}_bin'.format(col), labels[np.digitize(calProbDf[col], bins)])
year2017 year2016 year2015 year2014 year2013 year2012 year2011 year2010 year2009 year2008 year2007 year2006 year2005 year2004 year2003 year2002 year2001 year2000 year1999
0 0 2302688.000 2413693.000 2256486.000 2168558.000 2066282.000 1985939.000 1951843.000 1931046.000 1923389.000 2097383.000 2244158.000 2044425.000 2008856.000 1885044.000 1808412.000 1717079.000 1672181.000 1117481.000 1496984.000
1 1 1362965.000 1350909.000 1327282.000 1313024.000 1305272.000 1337781.000 1338887.000 1327547.000 1259782.000 948843.000 868455.000 862390.000 841620.000 768903.000 765313.000 748585.000 447990.000 326099.000 253401.000
2 2 772403.000 778213.000 751895.000 748270.000 794325.000 701705.000 713557.000 745222.000 779142.000 898040.000 900440.000 902645.000 914607.000 933216.000 946243.000 1302167.000 1043364.000 1091437.000 1098097.000
3 3 760653.000 727597.000 683742.000 641941.000 616501.000 605726.000 601817.000 605987.000 633514.000 618503.000 576404.000 544912.000 522607.000 498113.000 466032.000 426481.000 383305.000 356646.000 333690.000
4 4 704425.000 703839.000 693907.000 696804.000 706696.000 727458.000 742575.000 746332.000 729393.000 721906.000 699326.000 711959.000 671249.000 583177.000 580600.000 576899.000 568372.000 576476.000 555458.000
Я использую следующий метод для создания бинов
dit='0123456789'
binDefined = np.array([5, 10, 15, 20, 30, 50, 75, 100, 150, 200, 250, 300, 350, 400, 450, 500, 600,
700, 800, 900, 1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 3000,
4000, 5000, 10000, 15000, 20000, 25000, 30000, 50000, 100000, 200000, np.inf])
def id_generator(size=6, chars=string.digits):
"""generate a nonunique bin to avoid double counting"""
return ''.join(random.choice(chars) for _ in range(size))
binList= np.array(['b_{}'.format(id_generator(2, dit))for i in range(len(binDefined))])
cols = ('year2017', 'year2016', 'year2015', 'year2014',
'year2013', 'year2012', 'year2011', 'year2010', 'year2009', 'year2008',
'year2007', 'year2006', 'year2005', 'year2004', 'year2003', 'year2002',
'year2001', 'year2000', 'year1999')
binnedDF=calProbDf.assign(**dict(binned(cols, binDefined, binList)))
когда я пытаюсь создать назначенные корзины и генерировать binnedDF. Я выхожу из диапазона ошибок.
IndexError Traceback (most recent call last)
<ipython-input-73-e18328775bee> in <module>()
20
21
---> 22 binnedDF=calProbDf.assign(**dict(binned(cols, binDefined, binList)))
23
<ipython-input-7-3cc0b93a043c> in binned(cols, bins, labels)
1 def binned(cols, bins, labels):
2 for col in cols:
----> 3 yield ('{}_bin'.format(col), labels[np.digitize(calProbDf[col], bins)])
IndexError: index 42 is out of bounds for axis 1 with size 42
Длина binList и binDefined составляет 42. Есть 19 столбцов.
Моя цель состоит в том, чтобы классифицировать все данные в отдельные корзины на основе binList и binDefined выше.