在列和索引上合并两个数据帧

时间:2017-04-09 19:57:57

标签: python pandas dataframe

大家好我有两个数据框,第一个是数据框,它是通过另一个df按id(现在是索引)分组创建的,然后按'到期'列排序。

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''name'和'country'。

DF2:

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

所以我试图做的是根据id号(第一个df中的索引和第二个中的列)将'name'列添加到第一个数据帧。 所以我认为这段代码可行:

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'>

3 个答案:

答案 0 :(得分:1)

您可以rename使用dict来映射地图:

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'

答案 1 :(得分:1)

您可能会发现pd.concat是更好的选择,因为它可以接受数据集和系列的混合:http://pandas.pydata.org/pandas-docs/stable/merging.html#concatenating-with-mixed-ndims

答案 2 :(得分:0)

好吧所以我发现我不能以这种方式真正获得一列数据帧,但我可以重新制作df2以便它只包含一个所需的列:

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

并且不再有任何错误。