大家好我有两个数据框,第一个是数据框,它是通过另一个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'>
答案 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')
并且不再有任何错误。