复制 pandas Dataframe 中的行和列

Replicate rows and columns in pandas Dataframe

我想在一个有 36 列和 28 行的 pandas DataFrame 中多次(30 次)扩展和复制行和列。因此结果应该是 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

有简单的方法吗?提前致谢!

可以通过 Index.repeat and 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

但随后得到重复的列名,因此按名称进行选择是有问题的:

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