如何遍历数据框

时间:2019-08-05 17:18:32

标签: python pandas numpy

我有一个用户,书籍和评分的数据集,我想找到对特定书籍评价最高的用户,对于那些用户,我也想找到他们也喜欢的其他书籍。

我的数据如下:

private fun saveFileToExternalStorage(directory:File?,filePath:String,targetFileName:String){
        var uri:Uri? = null
        val values:ContentValues = ContentValues()
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
            values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpg")
            values.put(MediaStore.Images.Media.DATE_ADDED,System.currentTimeMillis() / 1000)
            values.put(MediaStore.Images.Media.TITLE, targetFileName)
            values.put(MediaStore.Images.Media.DISPLAY_NAME, targetFileName)
            values.put(MediaStore.Images.Media.DATE_TAKEN,System.currentTimeMillis())
            values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES+"/My_App_Folder")
            values.put(MediaStore.Images.Media.IS_PENDING, 1)
            uri= contentResolver.insert(MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY),values)
        }

        val baseFile = File(filePath)
        if(baseFile.exists()){

            if(Build.VERSION.SDK_INT < Build.VERSION_CODES.Q){
                directory?.let {
                    val targetFile = File(it.path+File.separator+targetFileName)
                    baseFile.copyTo(targetFile)
                }
            }else{
                uri?.let {
                    val outputStream: OutputStream? = contentResolver.openOutputStream(uri)
                    outputStream?.let{
                        val inputStream: InputStream = File(filePath).inputStream()
                        inputStream.copyTo(outputStream,1024)
                    }
                    values.clear()
                    values.put(MediaStore.Images.Media.IS_PENDING, 0)
                    contentResolver.update(uri,values,null,null)
                }
            }

            baseFile.delete()
        }
    }

我到目前为止做过:

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

最后一行失败

  

KeyError:“用户ID”

我想获得将LOTR> 7评为那些用户的用户,以便进一步从矩阵中找到他们也喜欢的电影。

我们将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

like_lotr数据帧'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]


另一种解决方案是使用reset_index。最后两行应该看起来像这样:

like_lotr = lotr[lotr > 7].to_frame().reset_index()
users = like_lotr['User-ID']

reset_index将索引放回列中。