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

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

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

import sys
import pandas as pd 
fm=pd.read_csv('nowcoder.csv',sep=',')
#预处理筛选
fm.date = fm.date.astype('str')
fm=fm[fm.date.apply(lambda x:x[0:7])=='2021/12']
fm.date=pd.to_datetime(fm.date).dt.date
fm=fm.drop_duplicates(subset=['user_id','date'])
#或者使用split提取
# fm.date=fm.date.apply(lambda x:x.split()[0])
# fm.date=pd.to_datetime(fm.date)
#方法一、笛卡尔连接
# fm=fm[['user_id','date']].drop_duplicates(subset=['user_id','date'])
# fm2=fm
# mg=pd.merge(fm,fm2,on='user_id',suffixes=('_a','_b'))#结果是同user_id名下的笛卡尔连接
# mg=mg[mg.date_a+pd.Timedelta(days=1)==mg.date_b]
# mg=(mg.groupby('user_id').count()+1)
# print(mg.date_a[mg.date_a>=3])

#方法二、使用日期-排名-聚合
fm=fm.sort_values(by='user_id')
fm['rk']=fm.groupby('user_id')[['date']].rank(method='first')#根据用户排名,排名不重复
fm.date=pd.to_datetime(fm.date)#防止非向量化warning str转换回date
fm['dif']=fm.date+pd.to_timedelta(-fm['rk'], unit='D')#连续的排名起始点相同
fm.dif=pd.to_datetime(fm.dif)
r=fm.groupby(['user_id','dif']).size() #筛掉不需要的内容
r=r.groupby(level=0).max() #如果有多个起始点 选最大值
print(r.loc[r>=3])#天数大于2


for line in sys.stdin:
    a = line.split()
    print(int(a[0]) + int(a[1]))

全部评论

相关推荐

码农索隆:我头回见校招简历把个人优势写在最前面的,是我老了吗
点赞 评论 收藏
分享
02-24 10:34
门头沟学院 Java
已注销:之前发最美的女孩基本爱答不理,发最帅的hr终于有反馈了,女孩子也要自信起来
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务