【问题标题】:Replicate rows and columns in pandas Dataframe复制熊猫数据框中的行和列
【发布时间】:2020-05-07 11:24:32
【问题描述】:

我想在具有 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

有没有简单的方法可以做到这一点?提前谢谢!

【问题讨论】:

    标签: python pandas replicate


    【解决方案1】:

    Index.repeatDataFrame.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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-07
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 2021-02-26
      相关资源
      最近更新 更多