Ausgabe
Hi ich habe folgende zwei DataFrame
‘s (index level == 2):
df1 = pd.DataFrame()
df1["Index1"] = ["A", "AA"]
df1["Index2"] = ["B", "BB"]
df1 = df1.set_index(["Index1", "Index2"])
df1["Value1"] = 1
df1["Value2"] = 2
df1
df2 = pd.DataFrame()
df2["Index1"] = ["X", "XX"]
df2["Index2"] = ["Y", "YY"]
df2["Value1"] = 3
df2["Value2"] = 4
df2 = df2.set_index(["Index1", "Index2"])
df2
Ich möchte folgendes DataFrame
mit einem 3-Level-Index erstellen, wobei die erste Ebene angibt, aus welcher DataFrame
die Werte entnommen werden. Beachten Sie, dass alle DataFrames
genau die gleichen Spalten haben:
Wie kann ich das am automatisiertesten machen? Idealerweise hätte ich folgende Lösung:
# start with empty dataframe
res = pd.DataFrame(index = pd.MultiIndex(levels = [[], [], []],
codes = [[],[],[]],
names = ["Df number", "Index1", "Index2"]),
columns = ["Value1", "Value2"])
res = AddDataFrameAtIndex(index = "DF1", level = 0, dfToInsert = df1)
res = AddDataFrameAtIndex(index = "DF2", level = 0, dfToInsert = df2)
Lösung
Eine mögliche Lösung, basierend auf pandas.concat
:
pd.concat([df1, df2], keys=['DF1', 'DF2'], names=['DF number'])
Ausgabe:
Value1 Value2
DF number Index1 Index2
DF1 A B 1 2
AA BB 1 2
DF2 X Y 3 4
XX YY 3 4
Beantwortet von – PaulS
Antwort geprüft von – Terry (FixError Volunteer)