美好的一天,
我有一个问题,一个非常基本的问题。假设我有一个数据集,该数据集的用户评分为行的电影和列的电影。我需要找到与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)
答案 0 :(得分:0)
代码中有两件事
首先,您根据官方文档np.array
由np.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