nocity.head()
user_id business_id stars
0 cjpdDjZyprfyDG3RlkVG3w uYHaNptLzDLoV_JZ_MuzUA 5
1 bjTcT8Ty4cJZhEOEo01FGA uYHaNptLzDLoV_JZ_MuzUA 3
2 AXgRULmWcME7J6Ix3I--ww uYHaNptLzDLoV_JZ_MuzUA 3
3 oU2SSOmsp_A8JYI7Z2JJ5w uYHaNptLzDLoV_JZ_MuzUA 4
4 0xtbPEna2Kei11vsU-U2Mw uYHaNptLzDLoV_JZ_MuzUA 5
withcity.head()
business_id city
0 YDf95gJZaq05wvo7hTQbbQ Richmond Heights
1 mLwM-h2YhXl2NCgdS84_Bw Charlotte
2 v2WhjAB3PIBA8J8VxG3wEg Toronto
3 CVtCbSB1zUcUWg-9TNGTuQ Scottsdale
4 duHFBe87uNSXImQmvBh87Q Phoenix
nocity
数据框有business_id
,(它们可能会重复,因为每个user_id
每个business_id
都有评分
withcity
数据框与city
business_id
我想要的结果是:
这很难说出来:
我想从city
数据框中查找与business_id
相关联的withcity
,并在名为nocity
的{{1}}中创建一个新列具有与cityname
为什么我放弃尝试并来到这里
我知道这可以通过某种联接操作来执行..但我不明白哪一个......我在网上看了他们并且对于如果某些{{1}会发生什么会有点困惑在执行该连接操作时,两个数据帧中是否可用?
例如:
business_id
有一些business_id
,其值withcity
;在使用business_id
执行任何适当的加入时,它找不到特定的city
所以我来这里寻求帮助。
我尝试了哪些其他选择?
nocity
我创建了一个字典,其中包含business_id
数据框中的area_dict = dict(zip(withcity.business_id, withcity.city))
emptylist = []
for rows in nocity['business_id']:
for key, value in area_dict.items():
if(key == rows):
emptylist.append(value)
和business_id
,并与city
数据框进行了某种匹配比较。
但我的方法可能需要花费很多时间,因为确切地说有470万条记录。
答案 0 :(得分:1)
IIUC merge
nocity.merge(withcity,on='business_id',how='left')
Out[855]:
user_id business_id stars city
0 cjpdDjZyprfyDG3RlkVG3w uYHaNptLzDLoV_JZ_MuzUA 5 NaN
1 bjTcT8Ty4cJZhEOEo01FGA uYHaNptLzDLoV_JZ_MuzUA 3 NaN
2 AXgRULmWcME7J6Ix3I--ww uYHaNptLzDLoV_JZ_MuzUA 3 NaN
3 oU2SSOmsp_A8JYI7Z2JJ5w uYHaNptLzDLoV_JZ_MuzUA 4 NaN
4 0xtbPEna2Kei11vsU-U2Mw uYHaNptLzDLoV_JZ_MuzUA 5 NaN
答案 1 :(得分:0)
一般情况下,只要您遇到这种情况,就要考虑避免循环和迭代,而是执行合并。然后 ,按摩数据以满足您的需求。例如,Wen的解决方案是最合适的方法。
但是我会添加一些东西。说这些是我下面的两个dfs:
让我们分别调用第一个和第二个dfs, nocity和withcity 。
你想这样做:
nocity.merge(withcity, on='business_id', how='left')
然而,如果你最终获得了温度高于上的纳米值。 检查密钥的数据类型
意思是,如果nocity中的business_id字段为int(由于某种原因),而withcity中的business_id字段为str,那么Pandas将会出现合并数据帧的问题,并且您将获得NaN值而不是所需的城市名称。
要检查你会做什么
#for all datatypes in the nocity df
print(nocity.dtypes)
#or just for the field's dtypes
print(nocity.business_id.dtypes)
然后你会转换为一个常见的数据类型,如果它们不同......
#example conversion of pandas column (series) to different datatype
nocity.business_id = nocity.business_id.astype(str)
withcity.business_id = withcity.business_id.astype(str)
#then perform merge as usual
nocity = nocity.merge(withcity, on='business_id', how='left')
希望这会有所帮助。另外,如果您喜欢,请不要忘记将您的名字从“城市”更改为“城市名称”
nocity.rename(columns = {'city': 'city name'})