- 博客(52)
- 收藏
- 关注
原创 [每日一练]查询结果的质量和占比(布尔值的灵活使用)
就可以通过avg函数,去直接计算出它的占比了。因为在IF判断式中:如果不符合条件的话,数据会判断为0,如果符合条件的话,判断为1。联合avg函数,计算出有所有0和1的总和,再除以所有0和1的数量,即可判断出符合条件的数据占总数居的比例了。
2024-08-29 17:55:25
514
原创 [每日一练]重新格式化部门表(分组聚合的思考)
由此可见,case...when语句是一个判断表达式,并没有聚合,如果用这种代码方式进行分组求解,不能对代码整体进行检索,造成数据不完整。我们可以使用由于每个人的月份只有一个,领的工资只有一份,我们可以使用max,min函数进行简单的聚合(每个人每月领的最大/最小的工资),或者使用sum(每个人在每月领的工资的综合),完成对整体数据的检索。首先,我们要理解题目意思,这里要求格式化该表格,显示出每个人在每个月的收入情况。
2024-08-28 14:53:08
331
原创 [每日一练]每位教师所教授科目的种类与agg聚合参数的介绍
由此我们可以看出,利用"nunique"参数符合题目聚合目标。这道题很简单,经典的分组聚合问题。
2024-08-27 14:31:57
217
原创 [每日一练]30天内活跃的用户数
个人推荐利用方法2来进行计算,方法1要人工计算天数日期,而方法2利用datediff日期差值计算函数,可以自动计算出"2019-07-27"和登陆日期的差值,只要这个差值在0-29内(30天的天数,包含截止日期),即可实现需求,而且灵活性更强大,可以适应多种情况。方法2:datediff("2019-07-27",activity_date) between 0 and 29。方法1: activity_date between "2019-06-28" and "2019-07-27"
2024-08-25 11:31:52
244
原创 [每日一练]销售分析——特点年份才出售的商品
难点在于如何筛选日期,我们在将两个表连接并且分组后,在having代码段里,可以用max(日期)<=限定时间,min(日期)>=限定时间,即可筛选出我们想要的日期时段。
2024-08-20 15:47:09
162
原创 [每日一练]项目员工的平平均工作年限
我们在开始可以用round(avg(),2)来写好结果数据的形式(先聚合),然后进行分组。首先我们需要将两张表进行连接,然后进行分组,最后计算平均年份保留两位小数点。
2024-08-20 15:40:55
181
原创 [每日一练]特定年份的最后一次登陆
如法炮制,我们也可以利用“time_stamp.dt.month,time_stamp.dt.day,ttime_stamp.dt.weekday,time_stamp.dt.quarter” 来提取出月份,日期,星期,季度。由于数据框中给出的是时间戳,所以我们需要先建立一列关于年份的列,将时间戳中的年份保存在其中,然后筛选出2020年登陆的用户。特殊代码:time_stamp.dt.year 表示从时间戳里截取出datatime形式的年份。首先我们要先取出特点的年份2020,然后才可以进行大小查询。
2024-08-20 14:45:19
306
原创 [每日一练]丢失信息的员工
merge特殊参数:how='outer' 可以保留两张表的所有内容,缺失的内容补齐null。首先利用外连接按照id键进行两表的合并,然后利用切片查询法进行空值的查找。
2024-08-20 14:33:35
169
原创 [每日一练]计算特殊奖金(loc查询函数的应用)
数据集.loc[查询条件,指定列]查询条件和指定列可以是多个,其中查询条件中不可以使用and和or等形式的逻辑符号,因为这种类型的符号在python中有明确的优先级,在这里容易造成语法混乱,我们可以使用 &、| 等符号进行逻辑判断。在切片查询和query函数中同理。
2024-07-06 10:30:10
261
原创 [每日一练]合作过至少三次的演员和导演的查询
遇到这种问题,显而易见的是要先进行分组,导演和演员的分组,然后查询按照导演和演员的分组出现过三次的组合。即先查询,在用group by分组,最后用having进行分组后条件筛选即可。
2024-07-05 20:30:52
359
原创 [每日一练]每个产品在不同商店的价格
抱歉各位,期末周的任务比较多,最近都没空刷数据类编程的题了,在接下来的暑假中,我会坚持保持训练和更优质的更新的。
2024-07-05 20:08:36
496
原创 [每日一练]利用子查询查询出现一次的最大数字
要实现两个主要的需求:返回最大的唯一值,不是唯一值返回空值。这时候可以想到利用子查询来做这道题:首先查询num的最大值来自于已经查询过的唯一值的一串数据,如果有唯一值,num的最大值便会从这个子查询中查找相应的数据,而如果都是重复值,那么子查询中返回的都是空值,那么max(num)查询返回的也是空值,算是一个特性吧。注意给要查询的值和子查询的值都要起别名,否则会报错。
2024-06-18 19:38:40
192
原创 [每日一练]员工的从属部门
这里需要用到的特殊函数是.duplicated() 可以检查重复值,前置~可以取反。这里内置参数keep=False表示表示所有重复项,取反后则得出所有不包含重复项的数据。直接查询相比if-else判断更加容易一些,但是有些复杂的情况还是会用到if-else语句,建议大家也掌握这个方法。两个条件要用到“或”的关系,所用用“|”来表示,实现的很轻松。这个方法比较繁琐,我会在代码内部编写注释来解释所有的功能。
2024-06-18 18:53:37
301
原创 [每日一练]利用左右指定键连接实现经理的下属员工数量
该题目难在我们可能不会想到左右的指定键位连接,从而使进程陷入停滞。还是要多加练习,把各种连接内化于心,才可以更从容的面对更多复杂的需求。
2024-06-18 16:52:47
559
原创 [每日一练]利用CASE...WHEN 语句实现三角形查询
CASE...WHEN 属于MySQL的DQL语句,可以执行类似if else类型多条件查询。在 SQL 中,(x, y, z)是该表的主键列。对每三个线段报告它们是否可以形成一个三角形。什么是case...when语句?该表的每一行包含三个线段的长度。查询结果格式如下所示。
2024-06-13 10:53:34
179
原创 [每日一练]销售员查询
表:sales_id 是该表的主键列(具有唯一值的列)。该表的每一行都显示了销售人员的姓名和 ID ,以及他们的工资、佣金率和雇佣日期。表:Companycom_id 是该表的主键列(具有唯一值的列)。该表的每一行都表示公司的名称和 ID ,以及公司所在的城市。表:Ordersorder_id 是该表的主键列(具有唯一值的列)。com_id 是 Company 表中 com_id 的外键(reference 列)。
2024-06-13 10:29:48
1121
原创 [每日一练]求关注者的数量与姓名聚合拓展
该题目来源于力扣:表:Followers(user_id, follower_id) 是这个表的主键(具有唯一值的列的组合)。该表包含一个关注关系中关注者和用户的编号,其中关注者关注用户。编写解决方案,对于每一个用户,返回该用户的关注者数量。按user_id的顺序返回结果表。查询结果的格式如下示例所示。Followers 表:0 的关注者有 {1}1 的关注者有 {0}2 的关注者有 {0,1}代码实现很简单,分组聚合,用agg自带的操作参数count可以很轻松的统计人数。
2024-06-13 09:54:08
417
原创 [每日一练]查询独特的领导和合伙人的数量
在 2020-12-8,丰田(toyota)有领导者 = [0, 1] 和合伙人 = [0, 1, 2] ,同时本田(honda)有领导者 = [1, 2] 和合伙人 = [1, 2]。在 2020-12-7,丰田(toyota)有领导者 = [0] 和合伙人 = [1, 2] ,同时本田(honda)有领导者 = [0, 1, 2] 和合伙人 = [1, 2]。首先我们依次对时间和产品名字进行分组,然后用聚合函数找出独特的字符串,重置索引。该表包含日期、产品的名称,以及售给的领导和合伙人的编号。
2024-06-13 09:36:06
739
原创 [每日一练]利用.str.len()布尔值查询实现字数需求
看到字数要求,第一反应就是pandas特有的.str.len()函数来查询字数,但是注意,该函数返回的是布尔值,是一个pandas.Series对象,通常用来进行索引匹配。推文 1 的长度 length = 14。推文 2 的长度 length = 32。查询所有无效推文的编号(ID)。当推文内容中的字符数。在 SQL 中,tweet_id 是这个表的主键。这个表包含某社交媒体 App 中所有的推文。时,该推文是无效的。
2024-06-11 14:35:46
576
原创 [每日一练]关于MySQL利用排序和分页参数查询最大值
如果再MySQL中想查询最大或最小值,可以利用先排序再展示要求的数据即可。将数据按照customer_number列进行分组,然后统计分组后customer_number列的频数,升序排序,最后再limit的分页参数里输入你要查询的前几个数据。customer_number 为 '3' 的顾客有两个订单,比顾客 '1' 或者 '2' 都要多,因为他们只有一个订单。所以结果是该顾客的 customer_number ,也就是 3。在 SQL 中,Order_number是该表的主键。查询结果格式如下所示。
2024-06-10 15:04:50
379
原创 [每日一练]首字母的大写和pandas关于字符串操作的代码拓展
功能强大的pandas库可以对字符串类型的数据做多样的操作,接下来我做一个拓展补充。
2024-06-10 14:43:19
272
原创 [每日一练]每台机器的进程平均运行时间
表中的数据没有顺序可言,必须要对它就像排序,原先排序machine_id列,使得每个机器区分开来,其次排序process_id,将每个工作区分开来,最后排序timestamp,对后续的diff()函数遍历打下基础,区分开开始和结束的时间。然后,按照machine_id列和process_id列进行分组,使得每个机器和每个机器的每个工作区分开来。简单来说就是machine_id列表示每个机器的编号,process_id表示每个工作的编号,现在我们要查询出每个机器的的每个工作的时间长度的平均。
2024-06-10 14:00:51
750
原创 [每日一练]查询员工奖金(左连接的使用)
表的所有内容,所以要用到左或右连接,之后返回的条件为奖金数小于1000以及奖金为null值的数据。这里我使用了左连接(因为employee表在左边)来保留该表的全部数据。该表的每一行都表示员工的姓名和 id,以及他们的工资和经理的 id。该表的每一行都包含一个员工的 id 和他们各自的奖金。首先要对两个表进行连接查询,可以很轻易的知道我们要保留。empId 是该表中具有唯一值的列。empId 是该表具有唯一值的列。编写解决方案,报告每个奖金。的员工的姓名和奖金数额。
2024-06-07 00:24:20
1018
原创 [每日一练]银行账户概要(分组聚合与重命名)
首先将两个表连接为一个表,之后按照name进行分组和amount列进行聚合,因为体重只要求改变amount列的列名,所以在分组聚合后可以直接用reset_index函数的内置参数name进行重命名,然后用query函数查找条件即可。编写解决方案, 报告余额高于 10000 的所有用户的名字和余额. 账户的余额等于包含该账户的所有交易的总和。注意:在更改列名时,rename函数内部的字典要前置一个特殊参数columns才可以起到更改列名的作用。account 是该表的主键(具有唯一值的列)。
2024-06-07 00:12:08
1182
原创 [每日一练]查询用户第一次登陆的时间
每行数据记录了一名玩家在退出平台之前,当天使用同一台设备登录平台后打开的游戏的数目(可能是 0 个)。在 SQL 中,表的主键是 (player_id, event_date)。第一次登陆的日期,就是登陆时间列的最小值。分组后查询最小值即可。这张表展示了一些游戏玩家在游戏平台上的行为活动。简单的分组聚合问题。
2024-06-04 14:48:16
411
1
原创 [每日一练]关于进店却未消费的顾客的查询
如我们所见,ID 为 30 和 96 的顾客一次没有进行任何交易就去了购物中心。在 2 次访问中,他们没有进行任何交易,在 1 次访问中,他们进行了 3 次交易。ID = 23 的顾客曾经逛过一次购物中心,并在 ID = 12 的访问期间进行了一笔交易。ID = 9 的顾客曾经逛过一次购物中心,并在 ID = 13 的访问期间进行了一笔交易。ID = 30 的顾客曾经去过购物中心,并且没有进行任何交易。ID = 96 的顾客曾经去过购物中心,并且没有进行任何交易。该表包含有关光临过购物中心的顾客的信息。
2024-06-04 14:29:53
1030
原创 [每日一练]关于上升的温度查询
在自连接后,首先用dateidff函数判断日期列相邻的差距不超过1,然后判断两个自己那个温度更高,最后返回ID。编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的。2015-01-02 的温度比前一天高(10 -> 25)2015-01-04 的温度比前一天高(20 -> 30)没有具有相同 recordDate 的不同行。看到相邻两个字,首先要想到自连接。id 是该表具有唯一值的列。该表包含特定日期的温度信息。这是要比较相日期的温度。结果格式如下例子所示。
2024-06-03 09:25:37
442
原创 [每日一练]患某种疾病的患者,正则表达式的匹配
大部分匹配内容的时候还是建议使用正则表达式。以上的两个思路正则表达式执行的速度稍微快一点,是311ms,而非正则表达式的执行速度是323ms,而且非正则表达式的方法要把所有的情况都要考虑并且写出来,相对繁琐。
2024-06-03 09:10:39
1977
原创 [每日一练]利用自连接删除重复邮箱的用户
但这并不符合条件,我们需要的不是最小的ID,而是需要邮箱去重后的最小ID,这是,我们可以在后续添加一个邮箱对等的条件,即可配合前边的最小ID条件,实现需求。为什么呢,因为我们吧Person表进行了自己对自己的比较,前者为A,后者为B,利用删除语句,删除A比B大的所有ID,即只保留最小的ID“1”我们保留最小的Id = 1。首先题目要求我们去重后保留较小的ID,我们可以使用自连接来排除大的ID。该表的每一行包含一封电子邮件。所有重复的电子邮件,只保留一个具有最小。id 是该表的主键列(具有唯一值的列)。
2024-05-30 10:49:28
254
原创 [每日一练]查找拥有有效邮箱的用户以及pandas正则表达式的使用
a-zA-Z]:这个变量匹配从 a 到 z 或 A 到 Z 的任何字符。请注意,你可以在方括号内指定的字符范围的数量没有限制,您可以添加想要匹配的其他字符或范围。请注意,字符 ^ 用来否定字符范围,它在方括号内的含义与它的方括号外表示开始的含义不同。[a-z]*:表示一个字符范围,匹配从 a 到 z 的任何字符 0 次或多次。[a-z]+:表示一个字符范围,匹配从 a 到 z 的任何字符 1 次或多次。[a-z]:表示一个字符范围,匹配从 a 到 z 的任何字符。表示,匹配括号内的任意一个字符;
2024-05-30 09:21:00
1999
原创 [每日一练]查询从不订购的客户(标量子查询)
已知这两个表是有外键连接的,是ID列,所有我们可以直接对两个表进行子查询。这里我们可以发现:这两个表通过customerId和id是连接起来了,我们可以从这两个字段入手进行子查询。customerId 是 Customers 表中 ID 的外键( Pandas 中的连接键)。该表的每一行都表示订单的 ID 和订购该订单的客户的 ID。该表的每一行都表示客户的 ID 和名称。在 SQL 中,id 是该表的主键。在 SQL 中,id 是该表的主键。找出所有从不点任何东西的顾客。
2024-05-29 19:27:58
528
原创 [每日一练]查询出现过一次的邮箱
这俩需要用到我们对数据进行查询,查询的区域没有要求,所以WHERE函数可以不需要,数据需要记得数,所以要对数据进行分组,需要GROUP BY参数,对查询的数据有类型要求,需要在分组参数后添加一个Having参数来统计数量。编写解决方案来报告所有重复的电子邮件。请注意,可以保证电子邮件字段不为 NULL。此表的每一行都包含一封电子邮件。电子邮件不包含大写字母。id 是该表的主键(具有唯一值的列)。a@b.com 出现了两次。
2024-05-29 18:58:06
336
原创 [每日一练]按日期分组销售产品的最优解法
我们在之前编辑数据时,总是在分组聚合后使用reset_index()函数进行索引的重置,是因为分组聚合后的数据比较复杂,使用这个代码比较保险,而当对整个数据进行分组时,可以直接使用as_index参数,可以提高执行速度,精简代码。我们在聚合函数内建立了products列后,要把表格中的数据都分组放在一个空间力,并对它们进行去重和按照词典排序,数据很多,使用lambda函数可以很快的遍历求解。对于2020-06-01,出售的物品是 (Pencil, Bible),按词典序排列,并用逗号分隔。
2024-05-29 18:29:03
979
空空如也
关于python中pandas库的数据排序问题
2024-05-18
我的代码对一个简单的数据进行了分析,print(Data)语句可以正常运行,可dtale.show(Data)语句却将会打开一个浏览器窗口,并在其中显示数据的交互式分析界面。求解答
2023-09-09
为什么我的字典添加代码总报错呢
2023-05-29
求关于打印等边三角形的分析步骤
2023-05-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人