2017-04-09 73 views
0

嗨,我有兩個數據框,第一個是通過由另一個df按id(現在是索引)分組創建的數據框,然後按'due'列進行排序。在列和索引上合併兩個數據幀

DF1:

  paid  due  
id   
3  13.000000  5.000000  
2  437.000000 5.000000  
5  90.000000  5.000000  
1  60.000000  5.000000  
4  675.000000 5.000000  

另一種是具有3列的正常數據幀: 'ID' '名稱' 和 '國家'。

DF2:

id name  country 
1 'AB'  'DE' 
2 'CD'  'DE' 
3 'EF'  'NL' 
4 'HAH'  'SG' 
5 'NOP'  'NOR' 

因此,我試圖做的是「名」列添加到基於ID號的第一個數據框(這是在第二個第一DF和列索引) 。 所以我想這個代碼將工作:

pd.merge(df1, df2['name'], left_index=True, right_on='id') 

,但我得到的錯誤

ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'> 
+0

請在你的文章中包含完整的錯誤堆棧跟蹤。 – DyZ

+0

我加了,請看。 –

+0

你的哪個數據庫具有哪個名稱?我沒有看到任何列名稱「title」。請確保您的數據與您的代碼片段一致。 – DyZ

回答

1

您可以通過dict使用rename在地圖:

df1['name'] = df1.rename(index=df2.set_index('id')['name']).index 
print (df1) 
    paid due name 
id     
3 13.0 5.0 'EF' 
2 437.0 5.0 'CD' 
5 90.0 5.0 'NOP' 
1 60.0 5.0 'AB' 
4 675.0 5.0 'HAH' 
0

好了,所以我想通了,我不能真正得到一列數據幀,但我可以重新制作df2,以便它只包含一個需要的列:

df2=df2[['id', 'name']] 
pd.merge(df1, df2, left_index=True, right_on='id') 

而且沒有錯誤了。