两列中出现值的计数,python

2024-06-16 12:50:35 发布

您现在位置:Python中文网/ 问答频道 /正文

你好

我有一个问题,一个非常基本的问题。假设我有一个数据集,其中有一行电影和一列电影的用户评分。我需要找到与电影2同时出现的电影。例如,对于电影1,电影2评分员中同时对电影1进行评分的百分比为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)

Tags: 数据用户importnumpydf电影asnp
1条回答
网友
1楼 · 发布于 2024-06-16 12:50:35

代码中有两件事

首先,通过np.array创建数据帧,基于官方文档np.array,每次只接受一种数据类型,因此numeric会自动转换为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代码

df.ne('0').sum(axis=1)
Out[786]: 
User1    2
User2    3
User3    2
User4    2
dtype: int64


df.ne('0').sum()
Out[788]: 
Movie1    3
Movie2    2
Movie3    4
dtype: int64

相关问题 更多 >