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

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

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

from datetime import timedelta
import pandas as pd 
import numpy as np 

# 1.读取数据
df = pd.read_csv('nowcoder.csv', sep=',', encoding='utf8')

# 2.保留2021年12月的用户
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].dt.strftime('%Y-%m-%d')
df['date'] = pd.to_datetime(df['date'])
df = df.loc[(df['date'].dt.year == 2021) & (df['date'].dt.month == 12)]

# 3.求连续练习三天以上的用户
# 3.1 排序
df.sort_values(by=['user_id', 'date'], ascending=True, inplace=True)
# 3.2 去重
df.drop_duplicates(subset=['user_id', 'date'], inplace=True)
# 3.3  分组求连续三天
def count_max_day(x):
    max_day, count_day =1, 1 # 最大连续天数,连续天数
    
	# 循环遍历每一天
    for idx, val in x.iterrows():
        now = val['date'] + timedelta(days=1)
        # 最大能有多少天
        for i in range(len(val)):
            if x['date'].isin([now]).any():
                count_day += 1
                now = now + timedelta(days=1)
            else:
                break
        # 求最大连续天数
        max_day = max(max_day, count_day)
        count_day = 1
    return max_day
data = df.groupby(by=['user_id']).apply(count_max_day)
print(data[data >= 3])

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务