Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在数据帧上迭代_Python_Pandas_Numpy - Fatal编程技术网

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)]
。这将选择所有用户,您可以从这里获得所需的其他数据。