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

从其他数据帧中分配一个数字 - Series([], Name: id, dtype:

从其他数据帧中分配一个数字 - Series([], Name: id, dtype:

莫回无 2021-11-16 14:54:49
我有两个 Pandas Dataframes,第一个名为 source,其中我们有 ID 和 Names (ID, Username) source.head()第二个名为 data_code,其中我们也只有 unsernames (0) 列和一个代码列,我将尝试在其中获取 ID。data_code.head()我所做的是创建一个函数,该函数将在两个 Dataframe 中查找相同的 Usenames,并从源 Dataframe 中获取用户名的 ID,如果不存在,它将生成一个随机 ID。在我的解决方案中,我尝试创建一个字典,其中只有唯一值。uniqueIDs = data_code[0].unique()FofToID= {}然后我将使用这个函数用 Id 填充字典for i in range(len(uniqueIDs)):     if uniqueIDs[i] in list(source["username"]):     FofToID[uniqueIDs[i]]= np.float_(source[source["username"]==i]["id"])    else:    FofToID[uniqueIDs[i]]= int(random.random()*10000000)输出如下:我的问题是数据source帧中存在的所有值都获得值系列([],名称:id,dtype:float64)。我试图解决这个问题,但我失败了。
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

使用merge与左连接,对于非存在值id使用fillna,并最后创建Series的set_index具有to_dict:


source = pd.DataFrame({'id':[111111,222222,666666,888888], 'username':['aa','ss','dd','ff']})

data_code = pd.DataFrame({'code':[0]*4, 0:['ss','dd','rr','yy']})



FofToID = (data_code.merge(source, left_on=0, right_on='username', how='left')

               .fillna({'id': int(random.random()*10000000)})

               .set_index(0)['id']

               .to_dict()

                )

print (FofToID)

{'ss': 222222.0, 'dd': 666666.0, 'rr': 367044.0, 'yy': 367044.0}


查看完整回答
反对 回复 2021-11-16
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

这是我得到的最终解决方案:


for i in range(len(uniqueIDs)):


     if uniqueIDs[i] in list(source["username"]): 

        FofToID[uniqueIDs[i]]= int(source[source["username"]==uniqueIDs[i]]["id"])


     else:

        FofToID[uniqueIDs[i]]= int(random.random()*10000000)


输出看起来像那样

//img1.sycdn.imooc.com//6193561a0001422d12860457.jpg

查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 297 浏览
慕课专栏
更多

添加回答

举报

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