我有两个数据帧,如下所示:
DF1
id name
-------------------------
0 43 c
1 23 t
2 38 j
3 9 s
DF2
user id
--------------------------------------------------
0 222087 27,26
1 1343649 6,47,17
2 404134 18,12,23,22,27,43,38,20,35,1
3 1110200 9,23,2,20,26,47,37
我想将df2中的所有ID拆分为多行,并将结果数据帧连接到“id”上的df1。
我执行以下操作:
b = pd.DataFrame(df2['id'].str.split(',').tolist(), index=df2.user_id).stack()
b = b.reset_index()[[0, 'user_id']] # var1 variable is currently labeled 0
b.columns = ['Item_id', 'user_id']
当我尝试合并时,我在结果数据帧中得到NaN。
pd.merge(b, df1, on = "id", how="left")
id user name
-------------------------------------
0 27 222087 NaN
1 26 222087 NaN
2 6 1343649 NaN
3 47 1343649 NaN
4 17 1343649 NaN
所以,我尝试了以下操作:
b['name']=np.nan
for i in range(0, len(df1)):
b['name'][(b['id'] == df1['id'][i])] = df1['name'][i]
它仍然给出与上面相同的结果。我很困惑,因为我确信它们都应该起作用! 任何帮助将非常感激!
我在SO上阅读了类似的帖子,但似乎没有一个具体的答案。我也不确定这与编码有什么关系。
提前致谢!
答案 0 :(得分:1)
问题是您需要将id
中的df2
列转换为int
,因为string
函数的输出始终为string
,如果使用数字也是如此。
df2.id = df2.id.astype(int)
另一种解决方案是将df1.id
转换为string
:
df1.id = df1.id.astype(str)
获取NaN
,因为没有匹配 - str
值与int
值不匹配。