为了账号安全,请及时绑定邮箱和手机立即绑定

将 ID 与 pandas DataFrame 上的名称相匹配

将 ID 与 pandas DataFrame 上的名称相匹配

扬帆大鱼 2023-10-31 14:02:41
我有一个包含 3 列的 DataFrame:ID、BossID 和 Name。每行都有一个唯一的 ID 和相应的名称。BossID 是该行人员的老板的 ID。假设我有以下数据框: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']})所以在这里,Anne 是 Ben 的老板,Ben Coe 是 Cate 和 Dan 的老板,等等。现在,我想要另一个列,其中包含每个人老板的名字。期望的输出是:    id  boss    name    boss_name0   1   NaN     Anne    NaN1   2   1.0     Ben     Anne2   3   2.0     Cate    Ben3   4   2.0     Dan     Ben4   5   3.0     Erin    Cate我可以使用丑陋的双 for 循环来获得输出。有没有更干净的方法来获得所需的输出?
查看完整描述

3 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

这应该有效:

bossmap = df.set_index('id')['name'].squeeze()
df['boss_name'] = df['bossId'].map(bossmap)


查看完整回答
反对 回复 2023-10-31
?
守着星空守着你

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


查看完整回答
反对 回复 2023-10-31
?
蝴蝶不菲

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


查看完整回答
反对 回复 2023-10-31
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信