复制 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
我想在一个有 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