【数据库】每天都做新题的用户有多少人?

题目描述:

数据库构造如下:


第一列表示用户ID,第三列表示用户做的这道题的题目ID,第二列表示用户做这道题的日期。这里我们定义用户第一次做了某道题目,那么用户就做了新题。问题是在以上的数据库中,求从10-1到10-2每天都做新题的用户由多少人

解题思路:

首先抽出当天做新题的同学;接着统计那些从10-1到10-10每天都做新题的同学。第一个问题,可以先抽出当天的uid-pid对;再和当天之前的数据中匹配,如果匹配数大于1,则丢弃该(uid, pid),否则保留;在保留下来的(uid, pid)对中去除pid,合并uid,得到当天做新题的uid。后一个问题,考虑用select when语句解决。

代码:

这里使用python的numpy和pandas两个库进行处理,且假设数据存放在csv文件中。

import pandas as pd
import numpy as np


def do_new_problems(data, date):
    today = data[data.date == date]
    before = data[data.date < date]
    record = pd.merge(today, before, how='left', on=['uid', 'pid'])
    Uids = record[np.isnan(record.date_y)][['uid', 'pid']]
    Uids.drop_duplicates('uid', inplace=True)
    return Uids


def always_do_new_problems(data, dates):
    if not dates:
        print('dates should has at least one element')
        return
    tmps = []
    for date in dates:
        tmps.append(do_new_problems(data, date))
    res = tmps[0]
    for tmp in tmps[1: ]:
        res = pd.merge(res, tmp, how='inner', on='uid')
    return res
    
data = pd.read_csv('YuanTiKu.csv')
dates = [1001, 1002]
always_learner = always_do_new_problems(data, dates)
print(always_learner)
print('总是做新题的用户数量有:{0}个'.format(len(always_learner)))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值