3 回答

TA貢獻1752條經驗 獲得超4個贊
這應該有效:
bossmap = df.set_index('id')['name'].squeeze() df['boss_name'] = df['bossId'].map(bossmap)

TA貢獻1799條經驗 獲得超8個贊
您可以設置id
為索引,然后使用pd.Series.reindex
df = df.set_index('id')
df['boss_name'] = df['name'].reindex(df['bossId']).to_numpy() # or .to_list()
? id? bossId? ? ? name boss_name
0? ?1? ? ?NaN? Anne Boe? ? ? ?NaN
1? ?2? ? ?1.0? ?Ben Coe? Anne Boe
2? ?3? ? ?2.0? Cate Doe? ?Ben Coe
3? ?4? ? ?2.0? ?Dan Ewe? ?Ben Coe
4? ?5? ? ?3.0? Erin Aoi? Cate Doe

TA貢獻1810條經驗 獲得超4個贊
'name'
為和創建一個單獨的數據框'id'
。重命名
'name'
并設置'id'
為索引
.merge
?df
使用新的數據框
import pandas as pd
# test dataframe
df = pd.DataFrame({'id':[1,2,3,4,5], 'bossId':[np.nan, 1, 2, 2, 3], 'name':['Anne Boe','Ben Coe','Cate Doe','Dan Ewe','Erin Aoi']})
# separate dataframe with id and name
names = df[['id', 'name']].dropna().set_index('id').rename(columns={'name': 'boss_name'})
# merge the two
df = df.merge(names, left_on='bossId', right_index=True, how='left')
# df
? ?id? bossId? ? ? name boss_name
0? ?1? ? ?NaN? Anne Boe? ? ? ?NaN
1? ?2? ? ?1.0? ?Ben Coe? Anne Boe
2? ?3? ? ?2.0? Cate Doe? ?Ben Coe
3? ?4? ? ?2.0? ?Dan Ewe? ?Ben Coe
4? ?5? ? ?3.0? Erin Aoi? Cate Doe
添加回答
舉報