Python 如何在数据帧上迭代
我有一个用户、书籍和评级的数据集,我想找到那些对某本书评价很高的用户,我想找到他们喜欢的其他书籍 我的数据如下所示:Python 如何在数据帧上迭代,python,pandas,numpy,Python,Pandas,Numpy,我有一个用户、书籍和评级的数据集,我想找到那些对某本书评价很高的用户,我想找到他们喜欢的其他书籍 我的数据如下所示: df.sample(5) User-ID ISBN Book-Rating 49064 102967 0449244741 8 60600 251150 0452264464 9 376698 52853 0373710720 7 454056 224764 0590416413 7 54148 25409 03124
df.sample(5)
User-ID ISBN Book-Rating
49064 102967 0449244741 8
60600 251150 0452264464 9
376698 52853 0373710720 7
454056 224764 0590416413 7
54148 25409 0312421273 9
到目前为止,我做到了:
df_p = df.pivot_table(index='ISBN', columns='User-ID', values='Book-Rating').fillna(0)
lotr = df_p.ix['0345339703'] # Lord of the Rings Part 1
like_lotr = lotr[lotr > 7].to_frame()
users = like_lotr['User-ID']
的最后一行失败
KeyError:“用户ID”
我想让那些评价LOTR>7的用户从矩阵中进一步找到他们喜欢的电影
我们将不胜感激。谢谢。在您的
like\u lotr
dataframe'User-ID'
是索引的名称,您不能像普通列一样选择它。这就是为什么行users=like_lotr['User-ID']
会引发KeyError
。它不是一列
此外,不推荐使用ix
,最好在您的情况下使用loc
。不要加引号:它必须是一个整数,因为'User-ID'
最初是一列整数(至少从您的示例中)
试着这样做:
df_p = df.pivot_table(index='ISBN', columns='User-ID', values='Book-Rating').fillna(0)
lotr = df_p.loc[452264464] # used another number from your sample dataframe to test this code.
like_lotr = lotr[lotr > 7].to_frame()
users = like_lotr.index.tolist()
user
现在是一个包含所需ID的列表
使用上面的小样本和我用来测试的数字,user
是[251150]
另一种解决方案是使用
重置索引
。最后两个LIN应如下所示:
like_lotr = lotr[lotr > 7].to_frame().reset_index()
users = like_lotr['User-ID']
reset\u index
将索引放回列中。检查df.columns
。可能在用户ID
部分之前或之后有一些额外的空间。列的名称应完全正确,否则将显示keyrorm
raised@rafaelc它只显示索引(['0345339703',dtype='object'),这很奇怪,因为我将它转换成一个框架。可能相关:df.columns的确切输出是什么?粘贴here@serafeim输出:索引(['0345339703',dtype='object')是的,就是它!但我现在如何过滤数据集/矩阵,只保留那些用户,并找到他们评价高的书籍?这将是另一个问题。但是,一旦您在users
中有了ID,您就可以返回到原始数据帧并执行:df.loc[df['User-ID'].isin(users)]
。这将选择所有用户,您可以从这里获得所需的其他数据。