《Python数据分析》之分组聚合

128 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天

  • DA29 牛客网的每日练题量

image.png

参考论文:

import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv', parse_dates=True, index_col='date')
df = nowcoder.groupby('date')
print(df.size())
  • DA30 牛客网用户练习的平均次日留存率

image.png

这题我是看不懂题目的 参考下这位大佬的解答

# 不走笛卡尔积
import pandas as pd
from datetime import timedelta, datetime

nowcoder = pd.read_csv("nowcoder.csv")
nowcoder["date"] = pd.to_datetime(nowcoder["date"]).dt.date
# 日期+1
nowcoder["datenew"] = nowcoder["date"].apply(lambda x: x + timedelta(days=1))
# join交集
nowcoder_1 = pd.merge(
    nowcoder[["user_id", "date"]],
    nowcoder[["user_id", "datenew"]],
    left_on=["user_id", "date"],
    right_on=["user_id", "datenew"],
)
# 次日留存
cnt = nowcoder_1.shape[0] / nowcoder.shape[0]
print(round(cnt, 2))
  • DA31 牛客网每日正确与错误的答题次数

image.png

参考代码如下:

import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv')
nowcoder['year-month-day'] = pd.to_datetime(nowcoder.date).dt.date  ##  pd.to_datetime()
a = nowcoder.groupby(["result","year-month-day"])
print(a.user_id.size())

  • DA32 牛客网答题正误总数

image.png

import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv')

a = nowcoder.groupby("result")
print(a.size())

也可参考代码如下:

import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv')
n=nowcoder.groupby('result')['result'].count()
print(n)
  • DA33 牛客网连续练习题目3天及以上的用户

image.png

这题无从下手,看下大佬的解答:

两个要点:
1. 先去掉date的时间,再转为日期格式;
2. 对user_id和答题日期去重。 

import pandas as pd
from datetime import timedelta
nowcoder = pd.read_csv('nowcoder.csv')
nowcoder['date'] = pd.to_datetime(nowcoder['date'].str.split(' ', expand=True).iloc[:,0]) # 去掉时间,然后将字符串转为日期格式
df = nowcoder[nowcoder['date'].dt.strftime("%Y-%m") == '2021-12'][['user_id','date']].drop_duplicates() # 筛选12月的数据,只取user_id和答题日期,并去重
df['rk'] = pd.to_timedelta(df.groupby(['user_id'])['date'].rank(),unit='d') # 根据user_id分组,并根据答题日期date排序;将排序转为日期差rk,以天为单位
df['diff'] = df['date']-df['rk'] # 答题日期减去日期差rk,得到diff;同一个用户同一次连续答题,会有一样的diff值
df1 = df.groupby(['user_id','diff']).count() # 得到每个用户每次连续答题的天数
df2 = df1.groupby('user_id')['rk'].max() # 取用户最大连续答题天数
print(df2[df2>=3])
  • DA34 牛客网不同毕业年份的大佬

image.png

参考代码:

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')

a = Nowcoder.groupby("Graduate_year").Achievement_value.max()
print(a)
  • DA35 不同等级用户语言使用情况

image.png

参考答案如下:

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
a = Nowcoder.groupby(["Level","Language"])

print(a.Name.count())
  • DA36 总人数超过5的等级

image.png

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
a = Nowcoder.groupby('Level').Nowcoder_ID.count()
print(a >5)