熊猫地图返回所有NaNs

时间:2018-02-22 22:15:38

标签: python pandas dataframe vlookup

我有两个数据框fdrtoolsdf

DF:

dfusers

dfusers:

ID   Count
A1   5
B1   12
C1   7

我想

ID  FullName
A1  Mike Frost
B1  Jack James
C1  Mickey Rose

在我的研究中,我最终尝试了 ID Count FullName A1 5 Mike Frost B1 12 Jack James C1 7 Mickey Rose

但结果数据框会为所有df['Fullname']=df['ID'].map(dfusers['FullName'])返回NaN。我能够使用Excel Vlookup成功创建所需的数据帧。为什么这不适用于熊猫?

3 个答案:

答案 0 :(得分:3)

您可以使用合并来实现此目的:

df = df.merge(dfusers, how='inner', on='ID')

答案 1 :(得分:1)

轻微修正,传递一系列FullName ID作为索引:

df['Fullname'] = df['ID'].map(dfusers.set_index('ID')['FullName'])

或者,使用replace(也适用于系列,但速度较慢,因为没有矢量化):

df['Fullname'] = df['ID'].replace(dfusers.set_index('ID')['FullName'])

df

   ID  Count     Fullname
0  A1      5   Mike Frost
1  B1     12   Jack James
2  C1      7  Mickey Rose

另一个选项可能会使用pd.Series.searchsorted

df['FullName'] = dfusers.loc[df.index[df.ID.searchsorted(df.ID)], 'FullName']
df

   ID  Count     Fullname
0  A1      5   Mike Frost
1  B1     12   Jack James
2  C1      7  Mickey Rose

假设df.ID已经排序。

答案 2 :(得分:1)

使用,set_indexmap

df = df.set_index('ID')
dfusers['Count'] = dfusers.ID.map(df['Count'])
print(dfusers)

输出:

   ID     FullName  Count
0  A1   Mike Frost      5
1  B1   Jack James     12
2  C1  Mickey Rose      7