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

Python 合并列和索引上的两个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,嗨,我有两个数据帧,第一个是一个数据帧,它是由另一个df按id(现在是索引)分组创建的,然后按'due'列排序 df1: 另一个是普通数据帧,它有3列:“id”“name”和“country” df2: 所以我试图做的是根据id号(第一个df中的索引和第二个df中的列)将“name”列添加到第一个数据帧中。 所以我认为这个代码会起作用: pd.merge(df1, df2['name'], left_index=True, right_on='id') 但我有一个错误 ValueError:

嗨,我有两个数据帧,第一个是一个数据帧,它是由另一个df按id(现在是索引)分组创建的,然后按'due'列排序

df1:

另一个是普通数据帧,它有3列:“id”“name”和“country”

df2:

所以我试图做的是根据id号(第一个df中的索引和第二个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'>
ValueError:无法将数据帧与类型的实例合并

您可以通过
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'

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

好的,所以我发现我不能用这种方式得到一列数据帧,但我可以重新制作df2,使它只包含一列所需的数据:

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

现在已经没有错误了。

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

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

并且不再有错误。

您可能会发现,
pd.concat
在这里是一个更好的选择,因为它可以接受数据帧和系列的混合:。

您可能会发现,
pd.concat
在这里是一个更好的选择,因为它可以接受数据帧和系列的混合:。

请将完整的错误堆栈跟踪包含到您的我添加了它,请看。您的哪个数据库有哪个名称?我没有看到任何列名称
'title'
。请确保您的数据与代码片段一致。请在您的帖子中包含完整的错误堆栈跟踪。我添加了它,请参见。您的哪个数据库具有哪个名称?我没有看到任何列名称
'title'
。请确保数据与代码片段一致。