让我们以这些示例数据帧为例:
df = pd.DataFrame({'Id':['1','2','3','4','5'], 'Value':[9,8,7,6,5]})
Id Value
0 1 9
1 2 8
2 3 7
3 4 6
4 5 5
df_name = pd.DataFrame({'Id':['1','2','4'], 'Name':['Andrew','Jason','John']})
Id Name
0 1 Andrew
1 2 Jason
2 4 John我想在df的Id列中添加人员的姓名(在df_name中可以获得),如果它存在,则将其放在括号中。我知道如何使用df的Id列上的for循环来做到这一点,但它对于大型数据帧的效率很低。你知道有什么更好的方法来解决这个问题吗?
预期输出:
Id Value
0 1 (Andrew) 9
1 2 (Jason) 8
2 3 7
3 4 (John) 6
4 5 5发布于 2021-01-14 17:52:27
对匹配值使用Series.map,在Series.fillna中添加()并将非匹配值替换为原始列
df['Id'] = ((df['Id'] + ' (' + df['Id'].map(df_name.set_index('Id')['Name']) + ')')
.fillna(df['Id']))
print (df)
Id Value
0 1 (Andrew) 9
1 2 (Jason) 8
2 3 7
3 4 (John) 6
4 5 5https://stackoverflow.com/questions/65716708
复制相似问题