Ich versuche, zwei Pandas Datenrahmen zu verbinden; Der linke hat einen Multiindex und der rechte ist nur ein einfacher Datenrahmen. Ich möchte dem Index des rechten Datenrahmens auf einer der Ebenen des linken Datenrahmens beitreten. Zum Beispiel, wenn wir das folgende Beispiel:Verbinden/Zusammenführen von zwei Pandas-Datenrahmen. Match die Ebenen von eins mit dem Index der anderen
Age
Boys
Sam 21
John 22
Girls
Lisa 23
und
Points
John 1
Lisa 2
Sam 3
Ich möchte mit diesem am Ende:
Age Points
Boys
Sam 21 3
John 22 1
Girls
Lisa 23 2
So wie ich es gearbeitet haben, ist wie folgt aufgeteilt Ich frage mich nur, ob es einen einfacheren Weg gibt
In[2]: import pandas as pd
In[3]: idx = pd.MultiIndex(levels=[['Boys', 'Girls', ''],['Sam', 'John', 'Lisa', '']], labels=[[0,2,2,1,2],[3,0,1,3,2]])
df1 = pd.DataFrame({'Age':['',21,22,'',23]}, index=idx)
df2 = pd.DataFrame({'Points':[1, 2, 3]}, index=['John','Lisa','Sam'])
In[4]: df1
Out[4]:
Age
Boys
Sam 21
John 22
Girls
Lisa 23
In[5]: df2
Out[5]:
Points
John 1
Lisa 2
Sam 3
Ich habe dann diese Schleife geschrieben, indem es einen Multi-Index den richtigen Datenrahmen „transformiert“ und die Werte neu geordnet entsprechend
lvl = df1.index.levels[1]
lbl = df1.index.labels[1]
y = df2.iloc[:,0].values.tolist()
z=[]
for x in [lvl[k] for k in lbl]:
try:
idx = df2.index.tolist().index(x)
except ValueError as e:
z.append('')
else:
z.append(y[idx])
temp=pd.DataFrame(index=df1.index)
temp['Points'] = z
ich sie jetzt
out = df1.join(temp)
out
Out[6]:
Age Points
Boys
Sam 21 3
John 22 1
Girls
Lisa 23 2
, die recht ordentlich ist! Vielen Dank – Aenaon