Ich habe diese Art von DatenrahmenErstellen neuen Datenrahmen als geordnete Mischung aus Spalten anderen Datenrahmen
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]})
Diese Rahmen haben immer die gleiche Form (und Spaltennamen alphabetische Reihenfolge passen doesnt immer). Ich möchte der beste Weg, um herauszufinden, um ihre Spalten in dem resultierenden Rahmen zu kombinieren, die wie folgt aussieht:
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
Mein Ansatz ist verschachtelten Schleifen und Füllen neue Rahmen Spalte für Spalte:
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)
Es funktioniert, aber ich denke, es gibt einen zuverlässigeren Weg, dies zu tun.
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]
Dank
:EDIT: mit Hilfe von pd.concat (Danke @Tbaki) kann es auch Woth zwei Schritten durchgeführt werden!
Brilliant Zip Idee! –
@AlexeyTrofimov, danke! :) – MaxU