- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
表:
Logs
+---------------+---------+ | Column Name | Type | +---------------+---------+ | log_id | int | +---------------+---------+ id 是上表具有唯一值的列。 上表的每一行包含日志表中的一个 ID。编写解决方案,得到
Logs
表中的连续区间的开始数字和结束数字。返回结果表按照
start_id
排序。结果格式如下面的例子。
示例 1:
输入: Logs 表: +------------+ | log_id | +------------+ | 1 | | 2 | | 3 | | 7 | | 8 | | 10 | +------------+ 输出: +------------+--------------+ | start_id | end_id | +------------+--------------+ | 1 | 3 | | 7 | 8 | | 10 | 10 | +------------+--------------+ 解释: 结果表应包含 Logs 表中的所有区间。 从 1 到 3 在表中。 从 4 到 6 不在表中。 从 7 到 8 在表中。 9 不在表中。 10 在表中。
三,建表语句
import pandas as pd
data = [[1], [2], [3], [7], [8], [10]]
logs = pd.DataFrame(data, columns=['log_id']).astype({'log_id':'Int64'})
四,分析
题解:
表1 日志表
字段 登录id
求 连续登录的id 开始数值和结束数字
第一步,给表排序
df =logs.sort_values('log_id') #排序
第二步,创建一个新列 生成一个连续的序列
df['rn'] = logs.reset_index().index + 1 #模拟row_number 实现一个rn列
df['rn1']=df['log_id']-df['rn'] # 取差值
第三步,创建一个新的dataframe对象 然后分别创建两个列 取分组后最大值和最小值
五,Pandas解答
import pandas as pd
def find_continuous_ranges(logs: pd.DataFrame) -> pd.DataFrame:
df =logs.sort_values('log_id') #排序
df['rn'] = logs.reset_index().index + 1 #模拟row_number 实现一个rn列
df['rn1']=df['log_id']-df['rn'] # 取差值
df2 = pd.DataFrame() #创建以df对象
df2['start_id'] = df.groupby('rn1')['log_id'].min() #给一列
df2['end_id'] = df.groupby('rn1')['log_id'].max() #在给他一列
return df2
六,验证
七,知识点总结
- Pandas排序的运用 API:sort_values
- Pandas创建一个序列模拟 slq中的row_number创建一个rn列 API:reset_index()
- Pandas创建df对象的运用
- pandas分组取最大值的运用 API groupby...min
- pandas分组取最小值的运用 API groupby...max
- 连续值的问题 想排序 在取序列 在取差值,在用差值分组取对应的需求
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用