我有两个数据帧如下:
df2 = pd.DataFrame(np.random.randn(5,2),columns=['A','C'])
df3 = pd.DataFrame(np.random.randn(5,2),columns=['B','D'])
我希望以交替的方式获取列,以便得到以下结果:
df4 = pd.DataFrame()
for i in range(len(df2.columns)):
df4[df2.columns[i]]=df2[df2.columns[i]]
df4[df3.columns[i]]=df3[df3.columns[i]]
df4
A B C D
0 1.056889 0.494769 0.588765 0.846133
1 1.536102 2.015574 -1.279769 -0.378024
2 -0.097357 -0.886320 0.713624 -1.055808
3 -0.269585 -0.512070 0.755534 0.855884
4 -2.691672 -0.597245 1.023647 0.278428
我认为我对这个解决方案效率很低。这样做的pythonic / pandic方法是什么?
P.S。在我的特定情况下,列名不是A,B,C,D,并且不按字母顺序排列。只知道我想要合并哪两个数据帧。
答案 0 :(得分:7)
如果您需要更具动态性的内容,请首先压缩两个DataFrame的两个列名称,然后将其展平:
df5 = pd.concat([df2, df3], axis=1)
print (df5)
A C B D
0 0.874226 -0.764478 1.022128 -1.209092
1 1.411708 -0.395135 -0.223004 0.124689
2 1.515223 -2.184020 0.316079 -0.137779
3 -0.554961 -0.149091 0.179390 -1.109159
4 0.666985 1.879810 0.406585 0.208084
#http://stackoverflow.com/a/10636583/2901002
print (list(sum(zip(df2.columns, df3.columns), ())))
['A', 'B', 'C', 'D']
print (df5[list(sum(zip(df2.columns, df3.columns), ()))])
A B C D
0 0.874226 1.022128 -0.764478 -1.209092
1 1.411708 -0.223004 -0.395135 0.124689
2 1.515223 0.316079 -2.184020 -0.137779
3 -0.554961 0.179390 -0.149091 -1.109159
4 0.666985 0.406585 1.879810 0.208084
答案 1 :(得分:2)
这个怎么样?
df4 = pd.concat([df2, df3], axis=1)
或者他们必须按特定顺序?无论如何,你总是可以重新排序它们:
df4 = df4[['A','B','C','D']]
没有写出专栏:
df4 = df4[[item for items in zip(df2.columns, df3.columns) for item in items]]
答案 2 :(得分:2)
您可以concat
然后reindex_axis
。
df = pd.concat([df2, df3], axis=1)
df.reindex_axis(df.columns[::2].tolist() + df.columns[1::2].tolist(), axis=1)
答案 3 :(得分:1)