赞
踩
现有牛客网12月每天练习题目的数据集nowcoder.csv。包含如下字段(字段之间用逗号分隔):
请你统计2021年12月连续练习题目3天及以上的所有用户。
数据集可以直接从当前目录下nowcoder.csv读取。
输出连续3天及以上的用户及对应的连续天数,以上数据集的输出结果如下:
- import sys
-
- for line in sys.stdin:
- a = line.split()
- print(int(a[0]) + int(a[1]))
-
- import pandas as pd
- nowcoder=pd.read_csv('nowcoder.csv')
-
- # 去重
- nowcoder.date=pd.to_datetime(nowcoder.date).dt.date
- nowcoder=nowcoder.drop_duplicates(['user_id','date'])[['user_id','date']]
-
- # 排名,然后转化为日期
- nowcoder['rk']=pd.to_datetime(nowcoder.groupby(['user_id'])['date'].rank(),unit='d').dt.date
-
- # 将日期与排名相减,如果是连续的,得到的差是相同的
- nowcoder['diff']=nowcoder.date-nowcoder.rk
-
- # 用用户id和差做分组然后计数,这个计数代表连续天数
- res=nowcoder.groupby(['user_id','diff'])['date'].count()
-
- # 筛选超过3的
- print(res[res>=3].reset_index('diff',drop=True))
注意:
unit='d'
参数表示排名被解释为以天为单位的时间戳。在Pandas的pd.to_datetime()
函数中,unit
参数用于指定时间戳的单位。以下是一些可用的选项:
'd'
:天'h'
:小时'm'
:分钟's'
:秒'ms'
:毫秒'us'
:微秒'ns'
:纳秒drop=True
.reset_index('newrank', drop=True)
会重置索引。'newrank'
是要被重置的索引的名字,drop=True
表示在重置索引后,原来的索引将被丢弃,而不是被添加到数据框的列中。
所以,这行代码的结果是,你会看到一个新的数据框(或者序列),其中包含了res
中大于或等于3的元素,索引被重置为默认的整数索引,从0开始。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。