猿问

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

我有两个 Pandas Dataframes,第一个名为 source,其中我们有 ID 和 Names (ID, Username) 

source.head()

第二个名为 data_code,其中我们也只有 unsernames (0) 列和一个代码列,我将尝试在其中获取 ID。

data_code.head()

http://img2.mukewang.com/619355eb0001f5f609570284.jpg

我所做的是创建一个函数,该函数将在两个 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)

输出如下:

http://img.mukewang.com/619355f900016d5908180309.jpg

我的问题是数据source帧中存在的所有值都获得值系列([],名称:id,dtype:float64)。我试图解决这个问题,但我失败了。

莫回无
浏览 298回答 2
2回答

饮歌长啸

使用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}

白衣染霜花

这是我得到的最终解决方案: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)输出看起来像那样
随时随地看视频慕课网APP

相关分类

Python
我要回答