我有两个数据框fdrtools
和df
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成功创建所需的数据帧。为什么这不适用于熊猫?
答案 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_index
和map
:
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