题解 | #牛客网连续练习题目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]))

全部评论

相关推荐

挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务