我有两个数据帧如下:
df2 = pd.DataFrame(np.random.randn(5,2),columns=['A','C'])
df3 = pd.DataFrame(np.random.randn(5,2),columns=['B','D'])
Run Code Online (Sandbox Code Playgroud)
我希望以交替的方式获取列,以便得到以下结果:
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
Run Code Online (Sandbox Code Playgroud)
我觉得这个解决方案效率很低.这样做的pythonic/pandic方式是什么?
ps在我的特定情况下,列名不是A,B,C,D,也不是按字母顺序排列的.只知道我想要合并哪两个数据帧.
如果您需要更具动态性的内容,请首先压缩两个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
Run Code Online (Sandbox Code Playgroud)
这个怎么样?
df4 = pd.concat([df2, df3], axis=1)
Run Code Online (Sandbox Code Playgroud)
或者它们必须按特定顺序排列?无论如何,您可以随时重新排序它们:
df4 = df4[['A','B','C','D']]
Run Code Online (Sandbox Code Playgroud)
无需写出列:
df4 = df4[[item for items in zip(df2.columns, df3.columns) for item in items]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |