Python 合并列和索引上的两个数据帧
嗨,我有两个数据帧,第一个是一个数据帧,它是由另一个df按id(现在是索引)分组创建的,然后按'due'列排序 df1: 另一个是普通数据帧,它有3列:“id”“name”和“country” df2: 所以我试图做的是根据id号(第一个df中的索引和第二个df中的列)将“name”列添加到第一个数据帧中。 所以我认为这个代码会起作用: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:
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'
。请确保数据与代码片段一致。