trending question中有一个有趣的r,它是这样的:
我有这个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
是否可以这样做?
我在想,熊猫会怎么做?
我在下面发布了自己的解决方案,但我也在寻找其他更好的选择!
答案 0 :(得分:2)
选项1
使用np.repeat
和df.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.concat
和df.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.concat
和ffill
,其中轴= 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.vstack
和numpy.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