复制列并将结果与​​另一个数据帧

时间:2017-09-05 03:27:51

标签: python pandas dataframe

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

  

我有这个df1:

A B C
1 2 3
5 7 9
     

其中A B C是列名。

     

我有另一个df2有一列:

A
1
2
3
4
     

我想为df1的每一列添加df2,创建此最终版本   数据帧:

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

是否可以这样做?

我在想,熊猫会怎么做?

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

3 个答案:

答案 0 :(得分:2)

选项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更短。

答案 1 :(得分:2)

让我们使用pd.concatffill,其中轴= 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

答案 2 :(得分:2)

选项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