#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