переход от одного столбца в фрейме данных в pandas ко многим или многим столбцам к одному

#pandas #dataframe #transform

#pandas #фрейм данных #преобразование

Вопрос:

У меня есть фрейм данных pandas с 20 элементами, которые я хотел бы изменить до 5 столбцов на 4 строки.

Возможно ли это с фреймом данных pandas? И тогда возможно ли сделать обратное и преобразовать полученный фрейм данных 5 * 4 в 2 * 10 или 1 * 20?

Ответ №1:

Я думаю, вы можете использовать сначала values для преобразования в numpy array , а затем numpy.ndarray.reshape :

 df = pd.DataFrame({'A':[1,2,3,7,7],
                   'B':[4,5,6,8,0],
                   'C':[7,8,9,7,8],
                   'D':[1,3,5,8,1]})

print (df)
   A  B  C  D
0  1  4  7  1
1  2  5  8  3
2  3  6  9  5
3  7  8  7  8
4  7  0  8  1

df = pd.DataFrame(df.values.reshape(4,5),columns=list('ABCDE'))
print (df)
   A  B  C  D  E
0  1  4  7  1  2
1  5  8  3  3  6
2  9  5  7  8  7
3  8  7  0  8  1
  

 print (df.values.reshape(10,2))
[[1 4]
 [7 1]
 [2 5]
 [8 3]
 [3 6]
 [9 5]
 [7 8]
 [7 8]
 [7 0]
 [8 1]]

print (pd.DataFrame(df.values.reshape(10,2), columns=list('AB')))
   A  B
0  1  4
1  7  1
2  2  5
3  8  3
4  3  6
5  9  5
6  7  8
7  7  8
8  7  0
9  8  1
  

РЕДАКТИРОВАТЬ с помощью комментария:

 pos = [1,5,7,8,10,8]

print (pd.DataFrame(np.array(pos).reshape(2,3),columns=list('ABC')))
   A   B  C
0  1   5  7
1  8  10  8
  

Комментарии:

1. что, если вы передаете что-то вроде списка в фрейм данных, можете ли вы изменить его одновременно? Например, если pos — это мой список, я получаю сообщение об ошибке: pd.DataFrame(pos).reshape(4,5),columns=list(‘ABCDE’))

2. Я думаю, вам нужно преобразовать list в массив numpy с помощью pd.DataFrame(np.array(pos).reshape(4,5),columns=list('ABCDE'))