python: повторное расширение фрейма данных

#python #dataframe

Вопрос:

Мой фрейм данных-это:

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

X форма есть 3*3 .
Для каждого значения я хочу увеличить n время в каждой строке и столбце, то есть преобразовать мой фрейм данных в форму (3*n)*(3*n) ,
если n=2 мой идеальный результат:

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

Как это сделать? Спасибо!

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

1. Будет ли решение на основе NumPy работать для вас?

Ответ №1:

Вы можете использовать numpy.повторите, как показано ниже:

 import numpy as np

X = np.array([[0, 1, 2],
              [1, 0, 3],
              [2, 3, 0]] )
res = X.repeat(2, axis=1).repeat(2, axis=0)
print(res)
 

Выход

 [[0 0 1 1 2 2]
 [0 0 1 1 2 2]
 [1 1 0 0 3 3]
 [1 1 0 0 3 3]
 [2 2 3 3 0 0]
 [2 2 3 3 0 0]]
 

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

1. Это работает! Но для этого нужно np.array() , а затем pd.DataFrame() преобразовать тип данных.

2. Не могли бы вы быть более конкретными, обратите внимание, что X в вашем вопросе не является фреймом данных

Ответ №2:

Базовым решением python (без импорта) было бы понимание вложенного списка:

 >>> [[y for y in x for _ in range(3)] for x in X for _ in range(3)]
[[0, 0, 0, 1, 1, 1, 2, 2, 2],
 [0, 0, 0, 1, 1, 1, 2, 2, 2],
 [0, 0, 0, 1, 1, 1, 2, 2, 2],
 [1, 1, 1, 0, 0, 0, 3, 3, 3],
 [1, 1, 1, 0, 0, 0, 3, 3, 3],
 [1, 1, 1, 0, 0, 0, 3, 3, 3],
 [2, 2, 2, 3, 3, 3, 0, 0, 0],
 [2, 2, 2, 3, 3, 3, 0, 0, 0],
 [2, 2, 2, 3, 3, 3, 0, 0, 0]]
>>> 
 

Ответ №3:

Один из способов использования pandas.Index.repeat :

 ind = df.index.repeat(2)
new_df = df.iloc[ind, ind]
print(new_df)
 

Выход:

    0  0  1  1  2  2
0  0  0  1  1  2  2
0  0  0  1  1  2  2
1  1  1  0  0  3  3
1  1  1  0  0  3  3
2  2  2  3  3  0  0
2  2  2  3  3  0  0