题解 | #牛客网连续练习题目3天及以上的用户#

牛客网连续练习题目3天及以上的用户

https://www.nowcoder.com/practice/4d77709a0ea2482282ee86852fe32f06

#import pandas as pd 
#data = pd.read_csv('nowcoder.csv',sep=',')
#data['date'] = pd.to_datetime(data['date'])
#data['date1'] = data['date'].dt.strftime('%Y-%M')
#print(data)
#data = data[data['date1'] == '2021-12']
#data['date2'] = pd.to_datetime(data['date'].dt.date)
#data['rk'] = pd.to_datetime(data.groupby(['user_id']).date2.rank(),unit='d')
#date1 = data.groupby(['user_id','cha']).count().groupby('user_id').rk.max()
#print(date1[date1>=3])
##############################################################################################
#我是分界线,上面的是显示详细日期的,下面是大佬的,明天再做代码分析好了

#引入模块

import pandas as pd

#from datetime import timedelta

import datetime

#读CSV文件

a = pd.read_csv('nowcoder.csv')

#对'user_id'和'date'列去重

a = a.drop_duplicates(['user_id','date'])[['user_id','date']]

#保留年月日

a.date = pd.to_datetime(a.date).dt.date

#设置时间范围为20211201~20211231

s_date = datetime.datetime.strptime('2021-12-01', '%Y-%m-%d').date()

e_date = datetime.datetime.strptime('2021-12-31', '%Y-%m-%d').date()

a = a[(a['date'] >= s_date) & (a['date'] <= e_date)]

#以'user_id'分组进行日期排序

a['sort_date'] = a['date'].groupby(a['user_id']).rank(method='dense',ascending = 0)

#得到每组最大和最小日期

maxdate = a[a.sort_date == a.sort_date.max()][['user_id','date','sort_date']]

mindate = a[a.sort_date == a.sort_date.min()][['user_id','date','sort_date']]

#左联接

date = pd.merge(maxdate,mindate,on='user_id',how='left')

#将最大最小日期和排序号做差,如果做差后两者相等,则说明连续,如果差大于等于2,则说明连续练习题目3天及以上

date['diffdate'] = date.date_y-date.date_x

date['diffrank'] = date.sort_date_x - date.sort_date_y

date['diffdate'] = pd.to_timedelta(date['diffdate']).dt.days

#得到符合条件的'user_id'

result = date[(date['diffdate'] == date['diffrank'])&(date['diffrank']>=2)]['user_id']

#匹配源表中符合条件的行

new={}

for i in range(len(result)):

    new[i] = a[a['user_id'] == result[i]]

#拼接字段,得到结果

final = pd.concat(list(new.values()), ignore_index=True)

finalresult = a.groupby('user_id')['date'].count()

print(finalresult)

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务