【发布时间】:2017-06-28 09:57:58
【问题描述】:
我有这种数据帧
import pandas as pd
df1 = pd.DataFrame({'a':[1.1,1.1,1.1], 'b':[2.1,2.1,2.1], 'c':[3.1,3.1,3.1]})
df2 = pd.DataFrame({'aa':[1.2,1.2,1.2], 'bb':[2.2,2.2,2.2], 'cc':[3.2,3.2,3.2]})
df3 = pd.DataFrame({'aaa':[1.3,1.3,1.3], 'bbb':[2.3,2.3,2.3], 'ccc':[3.3,3.3,3.3]})
这些框架始终具有相同的形状(并且列名并不总是符合字母顺序)。我想找出在结果框架中组合它们的列的最佳方法,如下所示:
a aa aaa b bb bbb c cc ccc
0 1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3
1 1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3
2 1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3
我的方法是嵌套循环并逐列填充新框架:
df_new = pd.DataFrame()
for i in range(df1.shape[1]):
for df in [df1, df2, df3]:
df_new[df.columns[i]] = df.iloc[:, i]
print(df_new)
它有效,但我认为有更可靠的方法来做到这一点。
编辑:在 pd.concat 的帮助下(感谢@Tbaki)也可以通过两个步骤完成:
df_new = pd.concat([df1,df2,df3],axis=1)
small = df1.shape[1]
big = df_new.shape[1]
#create correct order
new_order = []
for i in range(small):
new_order.extend(list(range(i, big, small)))
df_new.iloc[:, new_order]
谢谢!
【问题讨论】:
标签: python pandas dataframe merge reshape