IndexError: индекс 1 выходит за рамки для оси 1 с размером 1

Я применяю некоторую обработку как замену матричного элемента от одного значения индекса матрицы к другому. он отлично работает.

ds1 = [[ 4, 13, 6, 9], [ 7, 12, 5, 7], [ 7, 0, 4, 22], [ 9, 8, 12, 0]] ds2 = [[ 4, 1], [ 5, 3], [ 6, 1], [ 7, 2], [ 4, 1 ], [ 8, 2], [ 9, 3], [12, 1], [13, 2], [22, 3]] ds1= pd.DataFrame(ds1) ds2= pd.DataFrame(ds2) #Processing ds1 by replacing print type(ds2) ds2 = ds2.groupby(0).mean() #.........X print type(ds2) C = np.where(ds1.values.ravel()[:, None] == ds2.values[:, 0]) ds1_new = ds1.values.ravel() ds1_new[C[0]]=ds2.values[C[1], 1] #when I comment line x, it works.Otherwise getting error on this line ds1_new = ds1_new.reshape(4,4) 

Причина использования ds2 = ds2.groupby(0).mean() получает среднее значение аналогичных элементов. Когда я раскомментирую его, он работает без ошибок.

Версия

 Python 2.7.3 numpy - 1.9.2 pandas - 0.15.2 

редактировать

Моя главная цель – сопоставить значение индекса с ds2 в ds1 и заменить его соответствующим значением, поэтому результат будет выглядеть так:

 ds1_new = [[ 1, 2, 1, 3], [ 2, 1, 3, 2], [ 2, 0, 1, 3], [ 3, 2, 1, 0]] 

Готов поспорить, это будет проще, чем вы ожидали. Во-первых, давайте сделаем ds2 словарем, а не файловым кадром.

  ds2 = dict([ [ 4, 1], [ 5, 3], [ 6, 1], [ 7, 2], [ 4, 1], [ 8, 2], [ 9, 3], [12, 1], [13, 2], [22, 3]]) 

Теперь мы просто используем ds2 для непосредственного отображения всех элементов в ds1 :

 ds3 = ds1.copy() for i in range(4): ds3[i] = ds3[i].map( ds2 ) 0 1 2 3 0 1 2 1 3 1 2 1 3 2 2 2 NaN 1 3 3 3 2 1 NaN 

Если вы хотите 0 вместо NaN, просто сделайте ds3.fillna(0) .

По какой-то причине я не мог заставить это работать:

 ds3.applymap( ds2 ) 

Но это работает и избегает цикла по столбцам, хотя синтаксис не так прост, как для серии:

 ds1.applymap( lambda x: ds2.get(x,0) )