力扣练习题笔记

Pandas

2024/3/12 DataFrame.dropna()

https://leetcode.cn/problems/drop-missing-data/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

dropna 函数参数定义:

  1. axis:它可以是 {0 or ‘index’, 1 or ‘columns’}。默认为 0。如果 axis=0,则丢弃包含缺失值的行;如果 axis=1,则丢弃包含缺失值的列。
  2. how: 确定当我们至少有一个 NA 或全部 NA 时,是否从 DataFrame 中删除行或列。 how=‘any’: 如果存在任何 NA 值,则删除该行或列(默认)。how=‘all’:如果所有值都为 NA,则删除该行或列。
  3. thresh: 需要多少非 NA 值。这是一个整型参数,需要最小数量的非 NA 值才能保留行/列。
  4. subset:要考虑的另一个轴上的标签,例如,如果您正在删除行,则这些标签将是要包括的列的列表。当您只想考虑某些列中的 NA 值时,这特别有用。
  5. inplace: 这是一个布尔值,如果是 True,则对 DataFrame 本身进行更改。请记住,在使用 inplace=True 参数时,您修改的是原始的 DataFrame。如果出于任何原因需要保留原始数据,请避免使用 inplace=True,而是将结果赋给新的 DataFrame。

2024/3/13

https://leetcode.cn/problems/modify-columns/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata

def modifySalaryColumn(employees: pd.DataFrame) -> pd.DataFrame:
    # employees.salary=employees.salary *2
    employees.salary=employees['salary'] *2  
    return employees

2024//14 DataFrame.rename()

2024//14
https://leetcode.cn/problems/rename-columns/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rename.html#pandas.DataFrame.rename

DataFrame.rename(mapper=None, index=None, columns=None, axis=None, copy=None, inplace=False, level=None, errors='ignore')

参数定义:

mapper:	dict-like or function
Dict-like or function transformations to apply to that axis’ values. Use either mapper and axis to specify the axis to target with mapper, or index and columns.

# mapper, index, columns:可以传递以重命名索引或列的词典。在我们的示例中,我们使用 columns。

axis: 可以是 "index""columns"。确定是重命名索引还是重命名列。默认情况下,如果您提供 columns 参数,您将重命名列。

copy: 如果设置为 True,则创建一个新的 DataFrame。如果为 False,则修改原始 DataFrame。

inplace: 如果设置为 True,则重命名会原地修改 DataFrame,不会返回任何内容。如果为 False,则在不修改原有 DataFrame 的情况下,返回一个新的带有更名列的 DataFrame。

level: 对于具有多级索引的 DataFrame,应当重命名标签的级别。

errors: 如果是 'raise',如果尝试重命名不存在的项,则会引发错误。如果设置为 'ignore',任何重命名项目的失败都将被忽略。
import pandas as pd

def renameColumns(students: pd.DataFrame) -> pd.DataFrame:
    return students.rename(columns={"id":"student_id","first":"first_name","last":"last_name","age":"age_in_years"})

2024/3/15 DataFrame.astype()

DataFrame.astype(dtype, copy=True, errors='raise')
dtype: 它是一种数据类型,或列名->数据类型的字典。
copy: 默认情况下,astype 总是返回新分配的对象。如果 copy 设置为 False,则只有在旧对象无法强制转换为所需类型的情况下才会创建新对象。
errors: 控制对提供的数据类型的无效数据引发异常。默认设置为 raise,表示会引发异常。
def changeDatatype(students: pd.DataFrame) -> pd.DataFrame:
    return students.astype({"grade":int})

2024/3/16

偷懒=没写


2024/3/17 DataFrame.fillna()

https://leetcode.cn/problems/fill-missing-data/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata
DataFrame.fillna(value=None, *, method=None, axis=None, inplace=False, limit=None, downcast=_NoDefault.no_default)[source]

value: 标量,字典,Series 或 DataFrame。用于填充空洞的值(例如 0)。这就是我们在解决方案中使用的。

method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}。用于填充重新索引 Series 中的空洞的方法。默认为 None。

axis: {0 or ‘index’, 1 or ‘columns’}。沿其填充缺失值的轴。

inplace: 布尔值。如果为True,则原地填充。注意:这将修改此对象上的任何其他视图。默认值为 False。

value :scalar, dict, Series, or DataFrame

  • Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each index (for a Series) or column (for a DataFrame). Values not in the dict/Series/DataFrame will not be filled. This value cannot be a list.

method :{‘backfill’, ‘bfill’, ‘ffill’, None}, default None

  • ffill: propagate last valid observation forward to next valid.
  • backfill / bfill: use next valid observation to fill gap.Va

value :scalar, dict, Series, or DataFrame

axis:{0 or ‘index’} for Series, {0 or ‘index’, 1 or ‘columns’} for DataFrame

limit:int, default None

downcast:dict, default is None


2024/3/18 DataFrame.concat()

https://leetcode.cn/problems/reshape-data-concatenate/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata

pd.concat():pandas 内部的一个方便的函数,用于垂直(按行)或水平(按列)连接 DataFrame。

objs 参数是一个要串联的 Series 或 DataFrame 对象的序列或映射。
axis 参数决定连接的方向:
axis=0 设置为缺省值,这意味着它将垂直(按行)连接 DataFrame。
axis=1 将水平连接 DataFrame(按列)

2024/3/19 DataFrame.pivot()

https://leetcode.cn/problems/reshape-data-pivot/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata

pivot 函数中的每个参数执行的操作:

index:它确定新 DataFrame 中的行。在本例中,我们使用原始 DataFrame 中的 month 列作为索引,这意味着我们的透视表将为 month 列中的每个唯一值都建立行。
columns:它确定新 DataFrame 中的列。在这里,我们使用的是 city 列,这意味着我们的透视表将有一列对应于 city 列中的每个唯一值。
values:此参数指定重塑表格时要使用的值。在本例中,我们使用原始 DataFrame 中的 temperature 列。

import pandas as pd

def pivotTable(weather: pd.DataFrame) -> pd.DataFrame:
    weather_ = weather.pivot(index='month',columns='city',values='temperature')
    return weather_

2024/3/20 DataFrame.melt()

DataFrame.melt()

https://leetcode.cn/problems/reshape-data-melt/?envType=study-plan-v2&envId=introduction-to-pandas&lang=pythondata

关键概念:

melt 函数: pandas 的 melt 函数用于转换或重塑数据。它将 DataFrame 从宽格式(列表示多个变量)更改为长格式(每行表示一个唯一变量)。在我们的例子中,我们希望将销售数据从每个季度有单独的列转换为季度有一列、销售额有一列的格式。
melt 函数参数定义:

id_vars:这指定了应该保持不变的列。对于这个问题,只有 product 列保持不变,因为我们希望输出中的每一行都与一个产品相关联。

value_vars:这指定了我们想要“melt”或将其整形成行的列。在我们的示例中,以下是每个季度的销售数据列:quarter_1、quarter_2、quarter_3 和 quarter_4。

var_name:这是将存储来自 value_vars 的标头名称的新列的名称。在我们的问题中,这些是季度名称。

value_name:这是将存储 value_vars 中的值的新列的名称。在我们的问题中,这将是每个季度每种产品的销售数据。
import pandas as pd

def meltTable(report: pd.DataFrame) -> pd.DataFrame:
    data = report.melt(
        id_vars='product',
        value_vars=['quarter_1','quarter_2','quarter_3','quarter_4'],
        var_name='quarter',
        value_name='sales'
    )
    return data

2024/3/21 DataFrame.sort_values()

https://leetcode.cn/problems/method-chaining/

DataFrame.sort_values(by=‘’,ascending=False)

import pandas as pd

def findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:
    data = animals[animals.weight>100]
    # ascending=False 表示降序。by 表示按照 weight 列的值排序
    data = data.sort_values(by='weight',ascending=False)
    return data[["name"]]

    

SQL

2024/3/22

表: Weather

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| recordDate    | date    |
| temperature   | int     |
+---------------+---------+
id 是该表具有唯一值的列。
没有具有相同 recordDate 的不同行。
该表包含特定日期的温度信息
 

编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的 id 

https://leetcode.cn/problems/rising-temperature/?envType=study-plan-v2&envId=sql-free-50

  • DATEDIFF(date1 , date2) ;如果 date1>date2 返回 1 , 相反则返回 -1

select b.id 
from Weather as a,Weather as b
where a.Temperature < b.Temperature and DATEDIFF(a.recordDate,b.recordDate) = -1; 

2024-3-23

忙忘了


2024-3-24

https://leetcode.cn/problems/average-time-of-process-per-machine/?envType=study-plan-v2&envId=sql-free-50
Activity table:
+------------+------------+---------------+-----------+
| machine_id | process_id | activity_type | timestamp |
+------------+------------+---------------+-----------+
| 0          | 0          | start         | 0.712     |
| 0          | 0          | end           | 1.520     |
| 0          | 1          | start         | 3.140     |
| 0          | 1          | end           | 4.120     |
| 1          | 0          | start         | 0.550     |
| 1          | 0          | end           | 1.550     |
| 1          | 1          | start         | 0.430     |
| 1          | 1          | end           | 1.420     |
| 2          | 0          | start         | 4.100     |
| 2          | 0          | end           | 4.512     |
| 2          | 1          | start         | 2.500     |
| 2          | 1          | end           | 5.000     |
+------------+------------+---------------+-----------+
:编写解决方案,计算每台机器各自完成一个进程任务的平均耗时。
# 用一个表的  作者:HanXin
select  machine_id , 
        round(
            sum(
                if(
                    activity_type ='start' , -timestamp , timestamp
                )
            ) / count(*) * 2
            ,3
        ) as processing_time
from Activity 
group by machine_id ;

#  distinct
SELECT machine_id AS 'machine_id',
    ROUND(
        SUM(IF(activity_type = 'start', -timestamp, timestamp))
        / COUNT(DISTINCT process_id) 
        ,3) AS 'processing_time'
FROM Activity
GROUP BY machine_id


# 内联 ,2个表一起 
SELECT a1.machine_id AS 'machine_id',
    ROUND(AVG(a2.timestamp - a1.timestamp) 
        ,3) AS 'processing_time'
FROM Activity AS a1
    INNER JOIN Activity AS a2
    ON a1.machine_id = a2.machine_id
        AND a1.process_id = a2.process_id  
        AND a1.activity_type = 'start' AND a2.activity_type = 'end'
GROUP BY a1.machine_id


# case when then else end
SELECT machine_id AS 'machine_id',
    ROUND(
        SUM(
            CASE
                WHEN activity_type = 'start' THEN -timestamp
                ELSE timestamp
            END
        )
        / COUNT(DISTINCT process_id) 
    , 3) AS 'processing_time'
FROM Activity
GROUP BY machine_id


2024-3-25

加班

2024-3-26

加班

2024-3-27

编写解决方案,报告每个奖金 少于 1000 的员工的姓名和奖金数额。
https://leetcode.cn/problems/employee-bonus/?envType=study-plan-v2&envId=sql-free-50

select a.name,b.bonus  from Employee a 
left join Bonus b 
on a.empId = b.empId
where b.bonus < 1000 or b.bonus is null

准备开新篇:深度学习、NLP、pytorch 和 tensorflow

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值