Репликация строк и столбцов в pandas Dataframe - PullRequest
1 голос
/ 07 мая 2020

Я хотел бы расширять и реплицировать строки и столбцы несколько раз (30 раз) в pandas DataFrame, который имеет 36 столбцов и 28 строк. Таким образом, в результате должна получиться матрица размером 1,080 x 840.

Пример:

    ARG     BRA     BRN
AUS 2.93    3.06    3.56
AUT 5.36    5.47    2.14
BEL 5.36    5.47    2.14

Результат должен быть:

    ARG    ARG   BRA   BRA    BRN   BRN
AUS 2.93   2.93  3.06  3.06   3.56  3.56
AUS 2.93   2.93  3.06  3.06   3.56  3.56
AUT 5.36   5.36  5.47  5.47   2.14  2.14
AUT 5.36   5.36  5.47  5.47   2.14  2.14
BEL 5.36   5.36  5.47  5.47   2.14  2.14   
BEL 5.36   5.36  5.47  5.47   2.14  2.14

Есть простой способ сделать это? Заранее спасибо!

1 Ответ

2 голосов
/ 07 мая 2020

Это возможно с помощью Index.repeat и DataFrame.loc:

N = 2
df = df.loc[df.index.repeat(N), df.columns.repeat(N)]
print (df)
     ARG   ARG   BRA   BRA   BRN   BRN
AUS  2.93  2.93  3.06  3.06  3.56  3.56
AUS  2.93  2.93  3.06  3.06  3.56  3.56
AUT  5.36  5.36  5.47  5.47  2.14  2.14
AUT  5.36  5.36  5.47  5.47  2.14  2.14
BEL  5.36  5.36  5.47  5.47  2.14  2.14
BEL  5.36  5.36  5.47  5.47  2.14  2.14

Но тогда получите дублированные имена столбцов, поэтому выбор будет проблематичным c по именам:

print (df['ARG'])
      ARG   ARG
AUS  2.93  2.93
AUS  2.93  2.93
AUT  5.36  5.36
AUT  5.36  5.36
BEL  5.36  5.36

Для предотвращения возможна дедупликация имен столбцов:

df.columns = [f'{a}_{b+1}' for a, b in zip(df.columns, np.arange(df.shape[1]) % N)]
print (df)
     ARG_1  ARG_2  BRA_1  BRA_2  BRN_1  BRN_2
AUS   2.93   2.93   3.06   3.06   3.56   3.56
AUS   2.93   2.93   3.06   3.06   3.56   3.56
AUT   5.36   5.36   5.47   5.47   2.14   2.14
AUT   5.36   5.36   5.47   5.47   2.14   2.14
BEL   5.36   5.36   5.47   5.47   2.14   2.14
BEL   5.36   5.36   5.47   5.47   2.14   2.14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...