【问题标题】:Attribuate a number from an other Dataframe - Series([], Name: id, dtype: float64)从另一个 Dataframe 中分配一个数字 - Series([], Name: id, dtype: float64)
【发布时间】:2019-02-23 08:10:47
【问题描述】:

我有两个 pandas 数据框,第一个命名为源,其中我们有 ID 和名称(ID,用户名) 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 Dataframe 中存在的所有值都获得值 Series([], Name: id, dtype: float64)。我试图解决这个问题,但我失败了。

【问题讨论】:

    标签: python pandas dataframe attributes


    【解决方案1】:

    merge 与左连接一起使用,对于不存在的值id 使用fillna,最后由set_index 使用to_dict 创建Series

    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}
    

    【讨论】:

    • 感谢@jezrael 的解决方案,它会生成一个没有用户名的具有正确值的字典,但我会修复它。
    • @FiliusTanit - 是的,只是用一些数据进行测试。那么你的最终代码是什么?
    • @FiliusTanit - 添加了一些示例数据,解决方案有所更改,请检查。
    • 您的新解决方案为我提供了正确的 ID,但有一个像这样的常量 ID:{'pomouton': 9658462.0, 'jbwlodarczyk': 9658462.0, 'alex_barillet': 9658462.0, 'nextdoor_fr': 9658462.0, 'astridlhenry ': 9658462.0,...}\
    • 就像你的解决方案输出 {'rr': 367044.0, 'yy': 367044.0}
    【解决方案2】:

    感谢@jezrael 的贡献,这是我得到的最终解决方案:

    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)

    输出看起来像这样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      相关资源
      最近更新 更多