- 博客(119)
- 收藏
- 关注
原创 [力扣每日一练]关于特定字符串的匹配
可见序列号字符串在整个字符串中是独立出现的,它前后都有一个空字符,所以可以确定它作为一个特殊字符串前后是具有字符串边界的。
2025-04-02 18:53:19
165
原创 [力扣每日一练]关于MySQL和pandas的正则表达式应用
可见要求是:1.只包含一个特殊字符@2.结尾必须是字符.com3.@前的字符有且只能有大小写字母以及下划线4.@后,.com前的字符只能是大小写字母。
2025-03-27 16:57:51
340
原创 [力扣每日一练]字符串的拼接操作
想要将join函数应用到数据全体,可以在分组的数据后,通过聚合函数将join遍历传入到要作用的列中。题目要求按照洲名进行分组,而针对城市名聚合的方式是按照某种方式对数据进行拼接。这里分组后,通过agg聚合函数,针对city列,利用lambda遍历函数将join函数应用到分组后的city列全部数据,实现分组后的字符串拼接。这里没有特别针对state进行排序,因为已经用state进行分组了,系统默认对该字段按照ASC方式排序,正好符合题意。
2025-03-13 17:33:26
228
原创 [力扣每日一练]第二天验证
python的实现方法有些复杂,首先将二者转换为年月日的字符串形式,以防止时分秒对于“一天”这个概念的干扰。然后再将这些变换过形态的字符串日期数据转换为日期形式数据,再data中建立新列,取出对应日期列相减的字符串格式天数储存到该列中,最后进行联合查询即可。该题目对于两张表之间的连接没有特殊要求,之间连接并且对两个相应的时间列进行DATEDIFF函数的应用即可判定出二者之间是否相差一天。本人的能力有限,甚至有些不精通,该代码可以优化的更加简洁。
2025-03-11 19:06:09
270
原创 [力扣每日一练]关于特定的字符出现的次数
MySQL没有python强大的字符串匹配函数,但是MySQL拥有判断字符长度的函数,像判断某个特定字符出现的次数,可以用 原字符串的总字符数 减去 将特定字符替换为空字符的字符串的字符数 的数量,就是该特定字符的数量了。python的解法相对更容易,.str.len()可以判断出字符串的字符数量;.str.count('特定字符')可以直接判断出特定字符的字符数量。可见题目中有三个条件,只要满足一个条件则判定该数据不成立,所以三个条件之间的关系是“或”
2025-03-10 16:28:12
191
原创 [数据可视化的python脚本实现]关于餐厅消费的不同维度分析
数据类型有以下这些,其中detil_id为详细id,类似于索引,emp_id在这里用不到,所以这两个信息在这次项目中用不到。所以我们可以提前将这两列删除,不删除也没问题。为了统一,这里的所有图形均以柱状图绘制,如果有特殊需求,可以更改plt函数中的kind参数。
2025-03-06 19:10:49
1484
1
原创 [力扣每日一练]关于所有不同域名的查找
SUBSTRING函数的参数只能输入数字,这样就不能精确截取字符串了,而LOCATE函数可以将某个字符转化为其在字符串的位置数字,用LOCATE函数找出@的数字位置,然后将该数字传递给SUBSTRING函数的start参数即可完成截取。这里我就可以在select字段中截取到@后的字符了,在WHERE利用函数RIGHT匹配字符串“.com”,再进行分组聚合即可完成查询。由于这里正则表达式要查找的是@后的域名(不包含@),所以正则表达式查找的是@后小括号里的表达式,结尾,即$符号前以\.com表示。
2025-03-06 17:50:52
353
原创 [力扣每日一练]根据长度划分三角形(逻辑遍历判断每行,返回新的判断值)
首先一共有四个条件判断,要求返回判断的值,并且将这些值返回到一个新的名为:“triangle_type ”数据框。首先设置一共外置的自定义函数,转码由来进行逻辑判断,返回判断值。然后新建一个空表格,就是triangle_type 表。
2025-03-04 14:39:25
123
原创 [每日一练]关于不同列之间的字符串拼接
python并没有直接拼接字符串的内置函数,但我们可以通过自定义函数自己定义一个,然后用apply的方式遍历传入到表格中。
2024-12-30 16:25:21
194
原创 [每日一练]有资格享受折扣的用户数量
要求返回一个聚合函数的单个值,所以我们在判断之后,使用nunique聚合函数来统计id的单个值,最后将返回的单个聚合函数保存到具体的变量中,然后再新建一个数据框,将该变量赋值到该数据框中,就得到了有单个聚合函数的数据框值了。注意不能直接将聚合数据复制到原数据的新建列中,可能会造成不必要的BUG。
2024-12-24 09:33:18
193
原创 [每日一练]有资格享受资格的用户
这是第一次遇到关于创建储存函数的用法。相当于python中的def自定义函数,在储存函数中写入自定义的逻辑代码,之后如果想调用该储存函数的话直接传入参数即可。注意:因为这里的def函数中要与传入的形式参数进行比较,所以要对形式参数进行引用。通过在参数前添加符号“@”,即可引用成功。直接进行where字段的判断即可,利用between...and代码实现日期范围的选择。
2024-12-23 17:55:57
320
原创 [每日一练]关于不同表格之间的对比
该题目的业务要求就是将两张表进行统计聚合后,对聚合的数据进行对比。但是两张表没有相同的键值,数据完全不一样。如果不嫌麻烦的话,可以直接对比select语句,代码看起来更臃肿,不过节省内存,适合短期使用。注意这里需要将储存函数中的聚合函数进行命名,以便在后续调用两个临时表格的时候直接进行调用。
2024-12-21 09:29:27
238
原创 [每日一练]关于使用自连接来区分开始和结束的时间行
也就是要找到用户开始的时间和结束的时间只差小于一天时间的用户。面临一个问题,所有的用户信息,包括开始和结束的信息行,全部都混合在数据框中,分组后进行时间之间的加减会很困难。这时候就可以用到自连接,作用就是将开始的时间和结束的时间相区分为两张表,然后再按照这两张表中的键值进行再连接为一张表,最后我们根据这张表的两个时间列直接进行算数计算即可。通过连接字段里简单的大于小于的逻辑判断,就可以将A表区分为开始日期(同一个用户小的时间点),B表区分为结束日期(同一个用户大的时间点)
2024-12-17 16:28:39
196
原创 [每日一练]转换日期格式
首先,题目中给出了日期形式的数据,要求转换为特定形式的数据,针对MySQL来说,可以使用DATE_FORMAT(date,'百分号格式')函数实现日期格式的转换,根据题目要求,可见转换的类型为:%W:完整的星期名称(例如 Monday 或 Saturday),%M:完整的月份名称(例如 January 或 June) %d:两位数的日期(例如 01 到 31),%Y:四位数的年份(例如 2024)data['时间列'].apply(lambda x : x.strftime('转换的格式'))
2024-12-13 19:06:50
320
原创 [每日一练]关于没有广告的剧集的查询
可见有广告的聚集,广告的时间戳一定在节目播放的开始时间和结束时间之间,由此条件可以判断出连接后的总表格中的播放广告的剧集,然后在该查询语句外再包裹一个查询语句,筛选出无播放广告的剧集即可。
2024-12-11 16:48:15
129
原创 [每日一练]关于数据透视表的创建(数据结构重组的MySQL和pandas实现)
当然,在分组后,我们要对select字段里的casewhen语句添加随意的聚合语句,不然按照MySQL的特性,可能会随机返回一个值,造成不必要的数据谬误。数据透视表就是一种数据的重塑过程,改变原有的数据结构,针对不同类别(如时间、地点、产品等)进行分组、汇总和比较。case when 根据不同值转化为列 的列名 = 对应的不同值 then 要返回的对应数据。来聚合数据,生成一种更直观、更易于分析的格式。从数据程序员的角度来看,数据透视主要是通过。的数据(每行代表一个观测)转化为。
2024-12-10 10:56:39
482
原创 [每日一练]布尔值累加来判断不存在的列
如果在这一行中的年份数据不为2020,则这个数据就是结果。ps:可能忽略的BUG,有可能orders表里更本不存在在seller表中存在的数据,也就是这个用户在任何年份没有卖出任何商品,所以连接后的表格除了seller表存在的id和name有数据,其他列都为null值,这时候having字句里原有的内容会失效。所以sum()累加函数便会累加布尔值,即成立返回1,不成立返回0,变相的将sale_date列变换为关于是否为2020年的0/1变量,如果累加的布尔值和为0,则说明分组后的该数据不存在2020年。
2024-12-06 09:18:37
276
原创 [每日一练]消费者下单频率 (连接的简化语法和having字段的判断)
一步一步解释,这个判断条件需要在having字段里进行,因为判断的前提条件是按照客户分组。这样在后续调用连接键的时候就相对麻烦了,如果直接调用连接键位,可能出现:(Column '连接键' in group statement is ambiguous)连接键判断模糊的BUG。所以在保证不影响后序代码的逻辑以及连接的两张表的连接键的名称完全相同且不会改变,可以使用连接的简化语法。由此可见,这里有三个表,所以我们要连接两次。这样的话,连接键的名称就不会改变,不会出现后缀名。
2024-11-28 16:28:07
426
原创 [每日一练]制作会话柱状图(自定义全条件表格从而连接进行判断)
将两个表按照bin表(圈条件表)进行连接,然后按照bin表的bin列进行分组聚合即可。定义函数进行条件判断,这样就可以将这些复杂的判断一起传递给lambda遍历函数了。将自定义判断函数遍历传递给新建列bin_s。
2024-11-26 18:44:28
154
原创 [每日一练]制作会话柱状表图(使用with函数自建数据框,最后再进行分析)
要解决这个方法,可以自己用with函数新建两个数据框,第一个数据框是用casewhen判断函数组成的,用来判断原表格的duration属于哪个bin,第二个数据框是一个完全的新表,其中包括所有的判断项,将每一项用union函数进行连接。这样,复杂的问题就简化为了一个简单的分组聚合问题:按照b.list表的bin分组,然后统计出来分组后的b.bin的数量,最后返回b.list的bin和b.bin的count函数即可。现在要求,将b.bin表格中的数据,按照bin进行统计聚合,然后显示出来。
2024-11-26 16:56:34
255
原创 [每日一练]使用三元判断表达式结合遍历函数实现0/1函数的转换
可见我们需要保留所有的id值,即使ctr值为null,也要把null值转换为0进行显示。
2024-11-18 17:09:48
209
原创 [每日一练]用sum函数视线0/1转换特定数据的统计
如果硬使用count函数进行统计,那么复杂的统计条件会使代码变的繁琐。可以先将数据按照条件转换为0/1数据,然后再通过sum函数将所有的数据累加,就得到了统计出来的数据。转换为0/1数据的代码语句可以使用case when代码,如果符合条件,返回1;如果不符合条件,返回0.
2024-11-18 16:07:49
199
原创 [每日一练]transform转换数据类型(以及聚合函数之间的区别)
可以新建一列,将该列作为分组聚合后的数据。这时候可以使用transform函数将原始的数据进行类型的转换,而且不会改变数据类型,仍然还是series一位数组形式,这样就可以赋给新建的列了。
2024-11-14 15:54:32
193
原创 [每日一练]窗口函数的第一次练习
意思就是要求把聚合的函数全部返回到原来的数据集中。遇到这种为每一行数据都返回一个结果的要求,我们可以用到窗口函数。可见这里的聚合函数只用到了分组需求,所以对聚合函数使用窗口函数表示,会将聚合的数据返回到每一行中去。
2024-11-14 15:42:03
143
原创 [每日一练]用apply函数遍历判断数组类型数据
难点在于如何对聚合后的weather_state列进行判断。由于该列为Series类型数组,所以不可以和其他普通变量一样直接进行判断。这时我们可以利用apply函数,来为数组遍历传递自定义的函数。对两张表进行连接,查找相应的年份,然后视线平均值的分组聚合,这些步骤并不难。由此可见,新建的判断列weather_type创建成功。
2024-11-14 15:11:31
220
原创 [每日一练]通过自连接实现混合列的筛选(pandas解法)
首先先取出parent_id为null的数据,这样就可以得到所有的sub_id是帖子的值,储存到变量submissions_1中。意思就是说,在针对全表进行去重之后,如果sub_id(帖子或评论的id列)对应的parent_id(评论的帖子id)为null,说明sub_id在列中是表示帖子的,如果sub_id对应的parent_id不为null,说明这里的sub_id是评论,而这里的parent_id就是评论的帖子id,对应的是parent_id为null的sub_id。
2024-11-12 11:27:33
298
原创 [每日一练]通过自连接实现混合列的筛选
意思就是说,在针对全表进行去重之后,如果sub_id(帖子或评论的id列)对应的parent_id(评论的帖子id)为null,说明sub_id在列中是表示帖子的,如果sub_id对应的parent_id不为null,说明这里的sub_id是评论,而这里的parent_id就是评论的帖子id,对应的是parent_id为null的sub_id。现在要求统计每个帖子(非null的parent_id)被(对应parent_id为null的post_id)评论了多少次?也就是说,帖子无法评论,但可以被评论。
2024-11-12 11:04:19
388
原创 [每日一练]if函数进行简单的流程函数判断
难点在于如何统计判断order_date列和customer_pref_delivery_date列相同的数据。如果使用子查询未免太繁琐了,这里就可以使用流程判断函数转化为0/1数据。具体判断流程为:if(布尔判断式,为T时返回的数据,为F时返回的数据)。转换为0/1数据后用sum聚合函数就可以统计出符合条件的所有数据的个数了。
2024-11-11 14:14:25
163
原创 [每日一练]过去30天的用户活动
注意,有可能数据框出现所有的时间都不符合规定,所以可能会出现null值,题目要求如果是null值返回0。所以思路是:先进行时间节点的选择,在进行分组聚合,找出独一无二的user_id,然后再统计user_id的数量和计算session_id的总和,并 将这两个变量存储到新建的两个变量中,最后判断null值后计算公式,存放到自定义的数据框中。意思就是取分组后独一无二的session_id的综合除以user_id列的个数,条件是截至 2019-07-27(含)的 30 天内。
2024-11-09 16:08:09
360
原创 [每日一练]判断特定日期的独特报告记录
我们可以使用DATEDIFF来进行计算,具体语法为:DATEDIFF(date1,data2)=n表示date1-date2=n的间隔天数。这种方法也可以用来计算当前日期和特定日期的间隔,比如DATEDIFF(CURDATE(),date2)=n,这样就可以求出距离今天日期之前n天的日期。当然,这道题的要求相对简单,我们只需在DATEDIFF(2019-07-04,action_date)=n,这样就可以求出指定的action_date 了。
2024-11-05 16:16:30
298
原创 [每日一练]使用nunique函数查找唯一值
先查找出action_date列 == "2019-07-04"和action列 == "report",然后按照extra分组,并且按照post_id列进行nunique函数唯一值查找,最后重置索引再命名即可。本人能力有限,不明白如何解决这种BUG,可以直接把整个分组聚合语句直接输出,可以规避这个BUG。
2024-11-05 15:24:43
199
原创 [每日一练]关于全局对比的两种解法
嵌套两个子查询啦查询出分组聚合的最大值。all函数会将外部查询的值和子查询内部查询出的所有值进行对比。用关于max最大的聚合函数子查询内部再嵌套一个关于sum聚合函数的子查询,实现总和数据最大值的查询。要求分组后聚合的最大Price有两种思路。这道题只需要用到Sale表。
2024-11-04 14:34:56
264
原创 [每日一练]用unstack列转行的方法统计变量出现的次数
可见基本的数据以及呈现,但我们想要查看每个人对应的每个产品的购买情况,以便后续的分析。这里用unstack函数进行列转行,用fill_values=0参数的设定将空值填充为0,使用reset_index将索引显示出来,以便后续的分析。可见数据转换为了所有变量的0/1数据形式,购买过为1,未购买过0。做到现在,我们来判断一个客户买过S8没买过iPhone就简单许多了。最后只需要查询分组后的变量中S8是否不为0;
2024-11-01 20:57:00
208
原创 [每日一练]销售分析(通过数据的0/1转换进行是否存在的查询)
0/1数据转化可以帮助在清洗数据的时候更好的辨别某些分类数据是否存在,极大的便利了后续的分析工作。等),那么 SQL 处理分组时就无法确定应该返回哪个值。标准 SQL 要求在。的结果集中,除了分组列外,其他列必须用聚合函数处理。由于MySQL分组聚合的特性:如果在。中不使用聚合函数(如。
2024-11-01 19:56:07
317
原创 [每日一练]query查询中“@”外部引用
某些情况需要用到query函数。query函数查询最大值可以用到 @外部变量 进行外部变量的引用。还是先建立最大值的变量,然后用@将该变量引入到query函数中。先建立最大值的变量,再将变量赋予后面的切片中。如何用查询出最大的聚合值呢?方法2 query函数。
2024-11-01 18:53:53
247
原创 [每日一练]分组后元素最多的组别(all函数的全局比对)
由于需要的条件:“返回报告所有拥有最多员工的项目。具体思路为原始分组数据的计数=在子查询中 关于 子查询的子查询 最大值的查找。需要用到两个嵌套的子查询的用法,比较麻烦。直接用all函数,查询出的分组聚合数据大于所有(all)的子查询聚合数据的值,也可以查询出最大值。这里的>=all表示的是大于或者等于所有子查询的最大值,>=包括了最大值的项目,而>则不包括。注意:在子查询中的语句中要限制返回的数据为升序排序后的第一位,这样就可以求得最大的分组值。会将外部查询中的值与子查询返回的所有值进行比较。
2024-11-01 18:29:17
256
原创 [每日一练]diff函数的使用求取最短距离
但是又面临一个问题,这里的计算可能会有负值出现,导致最小值的判断谬误:题目要求判断的是绝对值。然后使用abs计算差分的绝对值。shift移动函数需要指定移动的距离,精度相比diff函数更高。但这道题的需求对是否相邻没有要求,选择diff函数即可。我们可以利用这个diff函数,在将原数据相邻的差值全部计算出来后,复值给新的数据框,最后返回 这个数据框的最小值即可。最后返回的是数据框格式的数据,用pd.DataFrame({'新建列名':[数据]})表示。diff函数用于解释序列中相邻元素之间的差值。
2024-10-22 16:53:07
199
原创 [每日一练]通过自连接实现最短距离的查找
查找最短距离需要我们让表中的每个数据相减(除了自己和自己相减),如何实现?这个时候,我们只需要让a表和b表的数据相减的绝对值=最小值即可,同时where条件语句为相同的值不可以相减。查找的数据会进行全局搜索,可以利用这个特点实现查询。
2024-10-22 16:32:31
158
原创 [每日一练]通过shift移动函数实现连续数据的需求
可以表示为我们查询的每个数据和它上面相邻的一个单位的数据都为1.但是这个代码不完整,因为我们还没有查询每个数据和它下面一个单位的数据的关系。所以我们在切片中的条件可以再复制一份,用“或”,将两者连接起来,在后者的条件中,shift函数中的参数应该更改为-1,表示该数据的后一位。首先,我们要先进行数据的清洗,使用shift函数对数据的排序有要求。然后我们需要解决两个需求:1.要求相邻的数据的free列都是“1",2.”要求数据是相邻的。条件2,要求查询出的相邻数据为为1,可以表示为。最后将代码联合起来即可。
2024-10-21 18:44:51
360
力扣 关于pandas分组聚合的问题
2024-10-17
Linux的IP地址与主机名映射失败
2024-09-21
关于python中pandas库的数据排序问题
2024-05-18
我的代码对一个简单的数据进行了分析,print(Data)语句可以正常运行,可dtale.show(Data)语句却将会打开一个浏览器窗口,并在其中显示数据的交互式分析界面。求解答
2023-09-09
为什么我的字典添加代码总报错呢
2023-05-29
求关于打印等边三角形的分析步骤
2023-05-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人