1
我試圖加入兩個熊貓數據框;左邊的,有一個多重索引,右邊的只是一個普通的香草數據框。我想加入左邊數據框其中一個層面的正確數據框的索引。例如,如果我們有如下的例子:加入/合併兩個熊貓數據框。匹配其中一個指數的水平
Age
Boys
Sam 21
John 22
Girls
Lisa 23
和
Points
John 1
Lisa 2
Sam 3
我想用這個來結束:
Age Points
Boys
Sam 21 3
John 22 1
Girls
Lisa 23 2
我已經算出來的方法如下,我只是想知道是否有更直接的方式
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
我都那麼寫這個循環,其通過給它一個多指標「轉換」正確的數據框和值適當地重新排列
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
我現在就可以加入他們的行列
out = df1.join(temp)
out
Out[6]:
Age Points
Boys
Sam 21 3
John 22 1
Girls
Lisa 23 2
的結果是相當整潔!許多thnx – Aenaon