【问题标题】:Replicating a column and concatenating the result with another dataframe复制一列并将结果与​​另一个数据框连接起来
【发布时间】:2018-02-13 06:07:17
【问题描述】:

中有一个有趣的trending question,它是这样的:

我有这个 df1:

A B C
1 2 3
5 7 9

A B C 是列名。

我有另一个 df2 的一列:

A
1
2
3
4

我想为 df1 的每一列附加 df2,创建这个 final 数据框:

A B C 
1 2 3
5 7 9
1 1 1
2 2 2
3 3 3
4 4 4

有可能吗?

我想知道,这将如何在 Pandas 中完成?


我已经在下面发布了我自己的解决方案,但我也在寻找其他更好的替代方案!

【问题讨论】:

    标签: r python pandas dataframe


    【解决方案1】:

    选项 1
    apply

    df1.apply(pd.Series.append, to_append=df2.A)
    
       A  B  C
    0  1  2  3
    1  5  7  9
    0  1  1  1
    1  2  2  2
    2  3  3  3
    3  4  4  4
    

    选项 2
    numpy.vstacknumpy.tile

    pd.DataFrame(
        np.vstack([df1, np.tile(df2, df1.shape[1])]),
        columns=df1.columns
    )
    
       A  B  C
    0  1  2  3
    1  5  7  9
    2  1  1  1
    3  2  2  2
    4  3  3  3
    5  4  4  4
    

    【讨论】:

    • 这些也很漂亮。
    【解决方案2】:

    让我们将pd.concatffill 与axis=1 一起使用:

    pd.concat([df1,df2]).ffill(1).astype(int)
    

    输出:

       A  B  C
    0  1  2  3
    1  5  7  9
    0  1  1  1
    1  2  2  2
    2  3  3  3
    3  4  4  4
    

    【讨论】:

    • 哦!这很聪明。利用它产生 NaN 的事实。
    • 我不喜欢强制转换为浮动并且必须重新转换为 int。
    【解决方案3】:

    选项 1

    使用np.repeatdf.append

    df2 = pd.DataFrame(df2.values.repeat(len(df1.columns), axis=1),\
                                                      columns=df1.columns)
    out = df1.append(df2)
    out
    
       A  B  C
    0  1  2  3
    1  5  7  9
    0  1  1  1
    1  2  2  2
    2  3  3  3
    3  4  4  4
    

    选项 2

    使用pd.concatdf.append

    out = df1.append(pd.concat([df2.A] * len(df1.columns), 1, keys=df1.columns))
    print(out)
    
       A  B  C
    0  1  2  3
    1  5  7  9
    0  1  1  1
    1  2  2  2
    2  3  3  3
    3  4  4  4
    

    第二步也可以使用pd.concat,但df.append更短。

    【讨论】:

      猜你喜欢
      • 2019-12-03
      • 2015-07-16
      • 2019-04-17
      • 2020-01-11
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      相关资源
      最近更新 更多