[LeetCode系列] 30天pandas挑战

很久没有写AI或者Python相关的代码,毕竟现在已经不是一个算法工程师了。所以就用白嫖版的leetcode练练手。

先丢个代码,再慢慢填坑把

import pandas as pd# 1.大的国家,选出面基至少为300万或者人口至少为2500万的国家
# 简单的pandas过滤
def big_countries(world: pd.DataFrame) -> pd.DataFrame:df = world[(world['area'] >= 3000000) | (world['population'] >= 25000000)]return df[['name', 'population', 'area']]# 1757 可回收且低脂的产品,过滤出可回收且低脂
def find_products(products: pd.DataFrame) -> pd.DataFrame:df = products[(products['low_fats'] == 'Y') & (products['recyclable'] == 'Y')]return df[['product_id']]# 183 从不订购的客户,考察且或非中的非,用~表示,而不是用Not表示
def find_customers(customers: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:df = customers[~customers['id'].isin(orders['customerId'])]df = df[['name']].rename(columns={'name': 'Customers'})return df# 1148 文章浏览1, 考察的不同列相等
def article_views(views: pd.DataFrame) -> pd.DataFrame:df = views[views['author_id'] == views['viewer_id']][['author_id']]df = df.rename(columns={'author_id': 'id'})df = df.drop_duplicates()df = df.sort_values(by='id')return df# 1683. 无效的推文,对比不同列的值进行过滤
def article_views(views: pd.DataFrame) -> pd.DataFrame:views = views[views['author_id'] == views['viewer_id']]['author_id']views = views.rename({'author_id': 'id'})views.drop_duplicates(inplace=True)views = views.sort_values(by='id')return views['id']# 1683. 无效的推文,列转str,使用str的方法进行过滤
def invalid_tweets(tweets: pd.DataFrame) -> pd.DataFrame:return tweets[tweets['content'].str.len() > 15][['tweet_id']]# 1873. 计算特殊奖金, 通过apply的方式进行复杂的过滤
def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:employees['bonus'] = employees.apply(lambda x: x['salary'] if x['employee_id'] % 2 and not x['name'].startswith('M') else 0,axis=1)df = employees[['employee_id', 'bonus']].sort_values('employee_id')return df# 1667. 修复表中的名字 这边注意,使用apply的话,本身就是str,不用强制转
def fix_names(users: pd.DataFrame) -> pd.DataFrame:users['name'] = users.apply(lambda x: x['name'][0].upper() + x["name"][1:].lower(),axis=1)return users.sort_values('user_id')# 1517. 查找拥有有效邮箱的用户 正则表达式的应用
def valid_emails(users: pd.DataFrame) -> pd.DataFrame:return users[users["mail"].str.match(r"^[a-zA-Z][a-zA-Z0-9_.-]*\@leetcode\.com$")]# 1527. 患某种疾病的患者 字符串contains正则表达
def find_patients(patients: pd.DataFrame) -> pd.DataFrame:return patients[patients['conditions'].str.contains(r'\bDIAB1')]# 177. 第N高的薪水
def nth_highest_salary(employee: pd.DataFrame, N: int) -> pd.DataFrame:df = employee[['salary']].drop_duplicates()key = 'getNthHighestSalary(' + str(N) + ')'if len(df) < N:#这边不能直接返回Nonereturn pd.DataFrame({key: [None]})# 这边类似数据库的count N limit 1df = df.sort_values(by='salary', ascending=False).head(N).tail(1)return df.rename(columns={'salary': key})# 176. 第二高的薪水
def second_highest_salary(employee: pd.DataFrame) -> pd.DataFrame:df = employee[['salary']].drop_duplicates()if len(df) == 1:return pd.DataFrame({'SecondHighestSalary': None})df = df.sort_values(by='salary', ascending=False).head(2).tail(1)# 这边就换种写法把,不用rename了return pd.DataFrame({'SecondHighestSalary': df['salary'][0]})def department_highest_salary(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame:# 类似sql的left join on a.departmentId = b.iddf = employee.merge(department, left_on='departmentId', right_on='id', how='left')df.rename(columns={'name_x': 'Employee', 'name_y': 'Department', 'salary': 'Salary'}, inplace=True)# 先找出最高工资,groupby分组, transform是执行某个函数,可以用lambda自己定义,也可以输入约定速成的几个max_salary = df.groupby('Department')['Salary'].transform('max')# 过滤工资等于最高工资的员工df = df[df['Salary'] == max_salary]return df[['Department', 'Employee', 'Salary']]# 178. 分数排名
def order_scores(scores: pd.DataFrame) -> pd.DataFrame:# 类似sql的 dense_rank over (partition score order by score desk)scores['rank'] = scores['score'].rank(method='dense', ascending=False)return scores[['score', 'rank']].sort_values('score', ascending=False)# 196. 删除重复的电子邮箱
def delete_duplicate_emails(person: pd.DataFrame) -> None:person.sort_values('id', inplace=True)person.drop_duplicates(['email'], keep='first', inplace=True)return# 1795. 每个产品在不同商店的价格
def rearrange_products_table(products: pd.DataFrame) -> pd.DataFrame:df =products.set_index(['product_id']).stack(dropna=True)df = df.reset_index()df.columns = ['product_id', 'store', 'price']return df# 1907. 按分类统计薪水
def count_salary_categories(accounts: pd.DataFrame) -> pd.DataFrame:low = (accounts['income'] < 20000).sum()avg = ((accounts['income'] <= 50000) & (accounts['income'] >= 20000)).sum()high = (accounts['income'] > 50000).sum()return pd.DataFrame({'category': ['Low Salary', 'Average Salary', 'High Salary'],'accounts_count': [low, avg, high]})# 1741. 查找每个员工花费的总时间
def total_time(employees: pd.DataFrame) -> pd.DataFrame:df = employees.groupby(by=['event_day', 'emp_id']).sum().reset_index().rename(columns={'event_day': 'day'})df['total_time'] = df['out_time'] - df['in_time']df.drop(columns=['in_time', 'out_time'], inplace=True)return df.sort_values(by='emp_id')# 511. 游戏玩法分析 I
def game_analysis(activity: pd.DataFrame) -> pd.DataFrame:df = activity.sort_values(by=['player_id', 'event_date'])[['player_id', 'event_date']].rename(columns={'event_date': 'first_login'})print(df)return df.drop_duplicates('player_id')# 2356. 每位教师所教授的科目种类的数量
def count_unique_subjects(teacher: pd.DataFrame) -> pd.DataFrame:df = teacher.drop_duplicates(['teacher_id', 'subject_id'])df['cnt'] = df.groupby('teacher_id')['subject_id'].transform('count')return df[['teacher_id', 'cnt']].drop_duplicates(['teacher_id', 'cnt'])# 596. 超过5名学生的课
def find_classes(courses: pd.DataFrame) -> pd.DataFrame:courses['cnt'] = courses.groupby('class')['student'].transform('count')df = courses[courses['cnt'] >= 5].drop('student', axis=1)[['class']]return df.drop_duplicates()# 586. 订单最多的客户
def largest_orders(orders: pd.DataFrame) -> pd.DataFrame:if orders.empty:return pd.DataFrame({'customer_number': []})df = orders.groupby('customer_number').size().reset_index(name='count')df.sort_values(by='count', ascending=False, inplace=True)return df[['customer_number']][:1]# 1484. 按日期分组销售产品
def categorize_products(activities: pd.DataFrame) -> pd.DataFrame:groups = activities.groupby('sell_date')stats = groups.agg(num_sold=('product', 'nunique'),products=('product', lambda x: ','.join(sorted(set(x))))).reset_index()stats.sort_values('sell_date', inplace=True)return stats# 1693. 每天的领导和合伙人
def daily_leads_and_partners(daily_sales: pd.DataFrame) -> pd.DataFrame:df = daily_sales.groupby(['date_id', 'make_name']).nunique().reset_index()df = df.rename(columns={'lead_id':'unique_leads', 'partner_id': 'unique_partners'})return df# 1050. 合作过至少三次的演员和导演
def actors_and_directors(actor_director: pd.DataFrame) -> pd.DataFrame:df = actor_director.groupby(['actor_id', 'director_id']).size().reset_index(name='cnt')df = df[df['cnt'] >= 3]return df[['actor_id', 'director_id']]# 1378. 使用唯一标识码替换员工ID
def replace_employee_id(employees: pd.DataFrame, employee_uni: pd.DataFrame) -> pd.DataFrame:df = employees.merge(employee_uni, how='left', left_on='id', right_on='id')return df[['unique_id', 'name']]# 1280. 学生们参加各科测试的次数
def students_and_examinations(students: pd.DataFrame, subjects: pd.DataFrame,examinations: pd.DataFrame) -> pd.DataFrame:# 按 id 和科目分组,并计算考试次数。grouped = examinations.groupby(['student_id', 'subject_name']).size().reset_index(name='attended_exams')all_id_subjects = pd.merge(students, subjects, how='cross')id_subjects_count = pd.merge(all_id_subjects, grouped, on=['student_id', 'subject_name'], how='left')id_subjects_count['attended_exams'] = id_subjects_count['attended_exams'].fillna(0).astype(int)id_subjects_count.sort_values(['student_id', 'subject_name'], inplace=True)return id_subjects_count[['student_id', 'student_name', 'subject_name', 'attended_exams']]# 570. 至少有5名直接下属的经理
def find_managers(employee: pd.DataFrame) -> pd.DataFrame:df = employee.groupby(['managerId']).size().reset_index(name='cnt')df = df[df['cnt'] >= 5]df = df.merge(employee, how='inner', right_on='id', left_on='managerId')return df[['name']]# 607. 销售员
def sales_person(sales_person: pd.DataFrame, company: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:company = company[company['name'] == 'RED']df = orders.merge(company, how='inner', on='com_id')sales_person = sales_person[~sales_person['sales_id'].isin(df['sales_id'])]return sales_person[['name']]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法篇】一文详解数据结构之二叉树

树的介绍及二叉树的C实现 一 . 树的概念二 . 相关术语三 . 树的表示四 . 什么是二叉树1> 二叉树的特性2> 特殊的二叉树3> 二叉树的性质 五 . 二叉树的存储结构1> 二叉树的顺序存储2> 二叉树的链式存储 六 . 堆1> 什么是堆2> 用堆存储数据3> 堆的Cpp代码…

木马病毒是怎么进入服务器的,要如何防范

木马病毒通常是基于计算机网络&#xff0c;基于客户端和服务端的通信、监控程序。名称来源于公元前十二世纪希腊和特洛伊之间的一场战争。能够在计算机管理员未发觉的情况下开放系统权限、泄漏用户信息、甚至窃取整个计算机管理使用权限&#xff0c;隐匿性高。 木马病毒的入侵方…

【恋上数据结构】哈夫曼树学习笔记

哈夫曼树 哈夫曼编码&#xff08;Huffman Coding&#xff09; 哈夫曼编码&#xff0c;又称为霍夫曼编码&#xff0c;它是现代压缩算法的基础 假设要把字符串 [ABBBCCCCCCCCDDDDDDEE] 转成二进制编码进行传输。 可以转成 ASCII 编码 (6569&#xff0c;10000011000101) &…

Python脚本模拟真实设备刷视频播放量、浏览量

简述 Python3脚本刷视频播放量 前情提示 系统:centOS7,8阿里云一折优惠云小站_专享特惠_云产品推荐-阿里云 宝塔8.x 一说 部分截图、链接等因过期、更换域名、MD语法等可能不显示,可联系反馈(备注好博文地址),谢谢❤带有#号、删除线、不操作、不执行字样的为提示或者…

C++学习之路(十九)C++ 用Qt5实现一个工具箱(用SQLite数据库来管理粘贴板数据)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《点击按钮以新窗口打开功能面板》功能。今天我们把粘贴板功能用SQLite数据库来管理&#xff0c;用SQLite来实现增删改查。下面我们就来看看如何来规划开发这样的小功能并且添加到我们的工具箱中吧。 老规矩&#xff…

基于51单片机多功能时钟闹钟系统

**单片机设计介绍&#xff0c;基于51单片机多功能时钟闹钟系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的多功能时钟闹钟系统是一种基于单片机的电子设备&#xff0c;能够显示时间、设置闹钟、进行计时以及提…

随机链表的复制[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个长度为n的链表&#xff0c;每个节点包含一个额外增加的随机指针random&#xff0c;该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由n个全新节点组成&#xff0c;其中每个新节点的值都设为…

sip 用户名密码注册通信流程

SIP&#xff08;Session Initiation Protocol&#xff09;用户注册的通信流程涉及客户端向SIP服务器注册&#xff0c;并在需要时进行身份验证。以下是基本的SIP注册通信流程&#xff0c;其中包含了用户名密码的注册和身份验证&#xff1a; 1. SIP REGISTER 请求: - 客户端&…

Java File类详解(中)

File的常见成员方法 判断、获取相关的方法 方法名称 说明 public boolean isDirectory() 判断此路径名表示的File是否为文件夹 public boolean isFile() 判断此路径名表示的File是否为文件 public boolean exists() 判断此路径名表示的File是否存在 public long lengt…

在 CentOS 7 上使用 `redis` 用户安装 Redis 7.2.3 的完整步骤

在 CentOS 7 上使用 redis 用户安装 Redis 7.2.3 的完整步骤如下&#xff1a; 安装依赖&#xff1a;首先&#xff0c;您需要安装一些必要的软件包&#xff0c;以编译和运行 Redis。打开终端并执行以下命令&#xff1a; sudo yum install gcc make创建 Redis 用户&#xff1a;为…

Hadoop学习笔记(HDP)-Part.18 安装Flink

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

查看Linux服务器的CPU利用率常用的命令

查看Linux服务器的CPU利用率常用的命令 在Linux服务器上&#xff0c;可以使用多种命令来查看CPU的利用率。以下是一些常用的命令&#xff1a; 1 top命令&#xff1a; top 命令是一个实时的系统监视器&#xff0c;可以显示当前系统的 CPU 利用率、内存利用率、进程信息等。在…

sort by modulus of a complex number

描述 复数E包含实部x和虚部y, Exyi;E的模为: 输入n(<1000)和n对(x,y); 按模数升序对复合体进行排序&#xff0c;如果模数相等&#xff0c;则按输入顺序排序。 排序后输出n行of (x_i,y_i,mod_i)&#xff0c;保留2个十进制小数。 输入 输入n和n对(x,y); 输出 输出排序后的n行(…

驱动模块--内核模块

内核模块宏都有什么&#xff0c;分别有什么作用&#xff1f; 1.__init的作用: 展开后为&#xff1a;__attribute__((__section_(".init.text")))实际是gcc的一个特殊链接标记 指示链接器将该函数放置在.init.text区段&#xff0c;在模块插入时方便内核从ko文件指定位…

P=NP?

背景&#xff1a;   2000年5月24日&#xff0c;新罕布什尔州的克莱数学研究所列出了数学和计算机科学中七个未解决的问题。然而&#xff0c;直到今天&#xff0c;这些问题中只有一个被解决了&#xff0c;那就是庞加莱猜想&#xff08;Poincar Conjecture&#xff09;——被俄…

前端】全局替换(replace//g)

//比如\ [] " 以[]为例 var ch"微笑"; var str"[微笑]我是小仙女&#xff01;[微笑]我是小仙女&#xff01;";alert(str.replace(ch,"哈")); //输出 哈我是小仙女&#xff01;[微笑]我是小仙女&#xff01;var encodeeval("/"&q…

手机如何设置防骚扰电话?

很多人都曾接到过烦人的推销电话&#xff0c;这些电话不仅让人感到烦恼&#xff0c;而且有时候还会接二连三地打来&#xff0c;让人不胜其烦。我们的手机号码似乎已经被泄露&#xff0c;很难避免这些骚扰。 有时&#xff0c;我们因无法忍受骚扰电话而选择立即将其拉黑&#xff…

深入理解Redis分片策略:提升系统性能的关键一步

目录 引言 1. 一致性哈希算法 2. 范围分片 3. 哈希槽分片 实战经验分享 结论 引言 Redis作为一款高性能的键值存储系统&#xff0c;为了应对大规模数据和高并发的访问&#xff0c;引入了分片策略&#xff0c;使得数据能够分布存储在多个节点上&#xff0c;实现系统的横向…

考研数据结构

851专业课 线性表线性表的定义线性表的顺序表示顺序表代码 线性表的链式存储表示单链表代码 顺序表和链表的比较 栈和队列栈顺序栈链栈 队列顺序队列链队列 串和数组kmp数组广义表 树和二叉树二叉树二叉树代码 线索二叉树线索二叉树代码 树和森林树的存储结构 哈夫曼树 图图的存…

【原创】提升MybatisPlus分页便捷性,制作一个属于自己的分页插件,让代码更加优雅

前言 MybatisPlus的分页插件有一点非常不好&#xff0c;就是要传入一个IPage&#xff0c;别看这个IPage没什么大不了的&#xff0c;最多多写一两行代码&#xff0c;可这带来一个问题&#xff0c;即使用xml的查询没法直接取对象里面变量的值了&#xff0c;得Param指定xml中的变…