2017-04-09 87 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') 

而且没有错误了。