令人兴奋的是,两列中的值出现计数python

时间:2018-08-24 12:54:36

标签: python pandas

美好的一天,

我有一个问题,一个非常基本的问题。假设我有一个数据集,该数据集的用户评分为行的电影和列的电影。我需要找到与movie2一起出现的电影。例如,对于电影1,对电影1进行评级的电影2评分者所占的百分比为0.5,即同时看过电影1和电影2的人数为1除以观看电影2和对其评级的总人数。

数据集:

import numpy as np
df = np.array([['','Movie1','Movie2','Movie3'],
                ['User1',1,0,2],
                ['User2',2,4,4],
                ['User3',4,0,4],
                ['User4',0,2,4]])
print(pd.DataFrame(data=df[1:,1:],
                  index=df[1:,0],
                  columns=df[0,1:]))

下面的行找到为电影评分的用户数量。我的问题是如何添加一个条件,该条件还检查col movie2中相应的单元格是否不是0-0表示一个人没有看过电影,在原始数据集中将其标记为缺失值:

df.apply(lambda x: x[x!=0]).count(axis=0)

1 个答案:

答案 0 :(得分:0)

代码中有两件事

首先,您根据官方文档np.arraynp.array创建数据框,每次仅接受一种数据类型,因此您的numeric将自动转换为{{1 }}

string

第二个解决方案

df.applymap(type)
Out[787]: 
              Movie1         Movie2         Movie3
User1  <class 'str'>  <class 'str'>  <class 'str'>
User2  <class 'str'>  <class 'str'>  <class 'str'>
User3  <class 'str'>  <class 'str'>  <class 'str'>
User4  <class 'str'>  <class 'str'>  <class 'str'>

更改您的maskdf=df.ne('0') maskdf.Movie1[maskdf.Movie2].mean() Out[795]: 0.5 代码

apply