Это возможно с помощью 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