【Nowcoder牛客刷题记录】 您所在的位置:网站首页 python读入csv文件数据并计算某两列的和并储存 【Nowcoder牛客刷题记录】

【Nowcoder牛客刷题记录】

2023-05-06 03:19| 来源: 网络整理| 查看: 265

​目录

五、数据清洗

DA24 去掉信息不全的用户

DA25 修补缺失的用户数据

DA26 解决牛客网用户重复的数据

DA27 统一最后刷题日期的格式

六、Json处理

DA28 将用户的json文件转换为表格形式

七、分组聚合

DA29 牛客网的每日练题量

DA30 牛客网用户练习的平均次日留存率

DA31 牛客网每日正确与错误的答题次数

DA32 牛客网答题正误总数

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

DA34 牛客网不同毕业年份的大佬

 DA35 不同等级用户语言使用情况

DA36 总人数超过5的等级

八、合并

DA37 统计运动会项目报名人数 

 DA38 统计运动会项目报名人数(二)

DA39 多报名表的运动项目人数统计

DA40 统计职能部分运动会某项目的报名信息

DA41 运动会各项目报名透视表

 DA42 合并用户信息表与用户活跃表

DA43 两份用户信息表格中的查找

九、排序

DA44 某店铺消费最多的前三名用户

DA45 按照等级递增序查看牛客网用户信息

十、函数

DA46 某店铺用户消费特征评分

DA47 筛选某店铺最有价值用户中消费最多前5名

五、数据清洗 DA24 去掉信息不全的用户

dropna()用法:

DataFrme.dropna(axis=0,how=’any’,thresh=None,subset=None,inplace=False)参数:axis: 默认axis=0。0为按行删除,1为按列删除how: 默认 ‘any’。 ‘any’指带缺失值的所有行/列; 'all’指清除一整行/列都是缺失值的行/列thresh: int,保留含有int个非nan值的行subset: 删除特定列中包含缺失值的行或列

inplace: 默认False,即筛选后的数据存为副本,True表示直接在原数据上更改。

import pandas as pd Nowcoder = pd.read_csv('Nowcoder.csv', sep=',', dtype=object) pd.set_option('display.width', 300) # 设置字符显示宽度 pd.set_option('display.max_rows', None) # 设置显示最大行 pd.set_option('display.max_columns', None) print(Nowcoder.dropna()) DA25 修补缺失的用户数据

import pandas as pd df = pd.read_csv('Nowcoder.csv', sep=',') pd.set_option('display.width', 300) # 设置字符显示宽度 pd.set_option('display.max_rows', None) # 设置显示最大行 pd.set_option('display.max_columns', None) df['Graduate_year'].fillna(df['Graduate_year'].max(),inplace=True) df['Language'].fillna('Python',inplace=True) df['Achievement_value'].fillna(int(df['Achievement_value'].mean()),inplace=True) print(df) DA26 解决牛客网用户重复的数据

import pandas as pd df = pd.read_csv('Nowcoder.csv', sep=',') pd.set_option('display.width', 300) # 设置字符显示宽度 pd.set_option('display.max_rows', None) # 设置显示最大行 pd.set_option('display.max_columns', None) print(df.duplicated()) print(df.drop_duplicates()) DA27 统一最后刷题日期的格式

import pandas as pd df = pd.read_csv('Nowcoder.csv',sep=',',dtype=object) # df['Last_submission_time'] = pd.to_datetime(df["Last_submission_time"],format="%Y-%m-%d") # 很神奇 df['Last_submission_time'] = pd.to_datetime("2022-01-01") print(df[['Nowcoder_ID','Level','Last_submission_time']]) 六、Json处理 DA28 将用户的json文件转换为表格形式

现有一个Nowcoder.json文件,它记录了牛客网的部分用户数据,包含如下字段(字段与字段之间以逗号间隔):

Nowcoder_ID:用户ID

Level:等级

Achievement_value:成就值

Graduate_year:毕业年份

Language:常用语言

如果你读入了这个json文件,能将其转换为pandas的DataFrame格式吗?

import pandas as pd import json pd.set_option('display.width', 300) # 设置字符显示宽度 pd.set_option('display.max_rows', None) # 设置显示最大行 pd.set_option('display.max_columns', None) with open('Nowcoder.json', 'r') as f: data = json.loads(f.read()) print(pd.DataFrame(data)) df = pd.read_json("Nowcoder.json") print(df) 七、分组聚合 DA29 牛客网的每日练题量

import pandas as pd import datetime as dt df = pd.read_csv("nowcoder.csv") # 将date转换为日期格式 df["date"] = pd.to_datetime(df["date"]).dt.date # 筛选统计区间 2021年12月 data = df[(df["date"] >= dt.date(2021, 12, 1)) & (df["date"] = 3]) ''' 代码已通过,两个要点: 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 牛客网不同毕业年份的大佬

 easy

import pandas as pd df = pd.read_csv("Nowcoder.csv", sep=",") print(df.groupby(["Graduate_year"]).Achievement_value.max())  DA35 不同等级用户语言使用情况

 easy

import pandas as pd Nowcoder = pd.read_csv('Nowcoder.csv', sep=',') print(Nowcoder.groupby(['Level','Language']).Nowcoder_ID.count()) DA36 总人数超过5的等级

import pandas as pd df = pd.read_csv('Nowcoder.csv', sep=',') print(df.groupby(['Level']).Nowcoder_ID.count()>5) 八、合并 DA37 统计运动会项目报名人数 

​编辑

​编辑

编辑 import pandas as pd # 员工 signup = pd.read_csv('signup.csv') # 项目 items = pd.read_csv('items.csv') # 合并数据 data = pd.merge(items, signup, on='item_id', how='inner') cnt = data.groupby(by='item_name')['item_name'].count() print(cnt)  DA38 统计运动会项目报名人数(二)

​编辑

import pandas as pd signup = pd.read_csv('signup.csv') items = pd.read_csv('items.csv') # 合并 data = pd.merge(items, signup, on='item_id', how='left') cnt = data.groupby(by='item_name')['employee_id'].count() # print(cnt) DA39 多报名表的运动项目人数统计

​编辑

​编辑

import pandas as pd signup = pd.read_csv("signup.csv") signup1 = pd.read_csv("signup1.csv") items = pd.read_csv("items.csv") # 级联员工表 signup2 = pd.concat([signup, signup1], axis=0) # 合并 data = pd.merge(items, signup2, on="item_id", how="inner") cnt = data.groupby(by="item_name")["item_name"].count() print(cnt) DA40 统计职能部分运动会某项目的报名信息

​编辑

import pandas as pd items = pd.read_csv("items.csv") signup = pd.read_csv("signup.csv") # 合并 data = pd.merge(items, signup) result = ( data.query("item_name == 'javelin'&department == 'functional'") .loc[:, ["employee_id", "name", "sex"]] .reset_index(drop=True) ) # reset_index是重置索引,原来的索引默认作为数据列保留,若不想要保留则设置参数 drop = True print(result) DA41 运动会各项目报名透视表

请你输出报名的各个项目情况(不包含没人报名的项目)对应的透视表。

​编辑

​编辑

import pandas as pd signup = pd.read_csv("signup.csv") items = pd.read_csv("items.csv") data = pd.merge(signup, items, on="item_id", how="inner") data1 = data.pivot_table(index=["sex", "department"], columns="item_name", aggfunc={'employee_id':'size'}, fill_value=0) print(data1)  DA42 合并用户信息表与用户活跃表

​编辑

import pandas as pd pd.set_option('display.width', 300) # 设置字符显示宽度 pd.set_option('display.max_rows', None) # 设置显示最大行 pd.set_option('display.max_columns', None) Nowcoder1 = pd.read_csv('Nowcoder1.csv', sep=',') Nowcoder2 = pd.read_csv('Nowcoder2.csv', sep=',') print(pd.merge(Nowcoder1,Nowcoder2,on='Nowcoder_ID')) DA43 两份用户信息表格中的查找

​编辑

import pandas as pd N1 = pd.read_csv('Nowcoder1.csv') N2 = pd.read_csv('Nowcoder2.csv') #设置显示最大行、列和宽度 pd.set_option('display.width',300) pd.set_option('display.max_rows',None) pd.set_option('display.max_columns',None) #合并 data = pd.merge(N1,N2,how = 'outer') result = data.loc[:,['Name','Num_of_exercise','Number_of_submissions']] print(result) 九、排序 DA44 某店铺消费最多的前三名用户

​编辑

import pandas as pd sales = pd.read_csv('sales.csv') data = sales.sort_values(by='monetary', ascending=False).reset_index(drop=True)[:3] print(data)

DA45 按照等级递增序查看牛客网用户信息

import pandas as pd pd.set_option('display.width', 300) # 设置字符显示宽度 pd.set_option('display.max_rows', None) # 设置显示最大行 pd.set_option('display.max_columns', None) Nowcoder = pd.read_csv('Nowcoder.csv', sep=',') df = Nowcoder.sort_values(by='Level',ascending=True) print(df) 十、函数 DA46 某店铺用户消费特征评分

import pandas as pd sales = pd.read_csv('sales.csv') # 按照结果要求转换类型 sales[['monetary']] = sales[['monetary']].astype('float32') # 求百分位 des = sales[['recency', 'frequency', 'monetary']].describe().loc['25%':'75%'] # 计算RFM sales['R_Quartile'] = sales['recency'].apply(lambda x: 4 if x


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有