Pandas 掉包侠刷题实战--条件筛选

news2025/1/19 16:28:42

本博文内容为力扣刷题过程的记录,所有题目来源于力扣
题目链接:https://leetcode.cn/studyplan/30-days-of-pandas/


文章目录

    • 准备工作
      • 1. isin(values) 和 ~
      • 2. df.drop_duplicates()
      • 3. df.sort_values()
      • 4. df.rename()
      • 5. pd.merge()
    • 题目-条件筛选
      • 1. 大的国家
      • 2. 可回收且低脂的产品
      • 3. 从不订购的客户
      • 4. 文章浏览 I


准备工作

先简单过下基础,了解一些常用的方法,


1. isin(values) 和 ~

isin(values)~ 是 Pandas 中用于数据筛选和过滤的两个常用操作符,它们通常用于数据框(DataFrame)的列操作,以下是对它们的详细解释:

  1. isin(values)
  • isin() 方法用于检查数据框的某一列中的每个元素是否包含在给定的 values 中,它返回一个布尔值的 Series,指示每个元素是否包含在 values 中。
  • values 可以是一个列表、集合或另一个 Series,用于比较数据框中的元素。
  • 常用语法如下:
    df['column_name'].isin(values)
    
  • 返回的结果是一个布尔值的 Series,其中每个元素表示数据框中对应位置的元素是否包含在 values 中。可以将这个 Series 用作数据框的索引来筛选包含特定值的行。

示例:

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 35]}
df = pd.DataFrame(data)

# 筛选年龄在 [25, 30] 范围内的行
filtered_df = df[df['Age'].isin([25, 30])]
print(filtered_df)

输出:

     Name  Age
0   Alice   25
1     Bob   30
  1. ~(取反操作符):
  • ~ 是 Python 中的取反操作符,在 Pandas 中,它可以用于取反一个布尔值的 Series。也就是说,它可以用于筛选出不满足某个条件的行。
  • 常用语法如下:
    ~condition
    
    其中 condition 是一个布尔值的 Series,表示要筛选的条件。
  • ~ 可以与其他筛选条件结合使用,例如,你可以使用 &(与)和 |(或)运算符来构建更复杂的条件。

示例:

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 35]}
df = pd.DataFrame(data)

# 筛选年龄不在 [25, 30] 范围内的行
filtered_df = df[~df['Age'].isin([25, 30])]
print(filtered_df)

输出:

     Name  Age
2  Charlie   22
3    David   35

在上述示例中,~ 操作符被用于筛选出年龄不在 [25, 30] 范围内的行。

总之,isin(values) 是用于检查列中元素是否包含在给定值中的方法,而 ~ 操作符用于对布尔条件取反,用于筛选出不满足条件的行。这两种方法都是在 Pandas 中对数据进行筛选和过滤时非常有用的工具。


2. df.drop_duplicates()

df.drop_duplicates() 用于删除 DataFrame 中的重复行。这个函数的详细解释如下:

语法:

DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)

参数解释:

  • subset:可选参数,用于指定要检查重复行的列名列表。默认值为 None,表示检查整个行是否重复。
  • keep:可选参数,指定要保留哪个重复行的方式。有三个选项:
    • 'first':保留第一个出现的重复行(默认值)。
    • 'last':保留最后一个出现的重复行。
    • False:删除所有重复行。
  • inplace:可选参数,如果为 True,则会在原始 DataFrame 上进行操作,而不创建一个新的 DataFrame。默认值为 False,表示创建一个新的 DataFrame 并返回结果。

函数的作用:
drop_duplicates() 函数的主要作用是识别并删除 DataFrame 中的重复行,从而使 DataFrame 中的数据变得唯一或去重。

示例用法:

import pandas as pd

data = {'A': [1, 2, 2, 3, 4],
        'B': ['X', 'Y', 'Y', 'Z', 'Z']}
df = pd.DataFrame(data)

# 去除重复行,默认保留第一个出现的重复行
df_no_duplicates = df.drop_duplicates()

# 显示去重后的 DataFrame
print(df_no_duplicates)

输出:

   A  B
0  1  X
1  2  Y
3  3  Z
4  4  Z

在上面的示例中,原始 DataFrame df 包含了一些重复的行。通过调用 drop_duplicates() 函数,我们得到了一个去重后的 DataFrame df_no_duplicates,其中只保留了第一个出现的重复行。

需要注意的是,drop_duplicates() 函数默认返回一个新的 DataFrame,原始 DataFrame 不会被修改。如果要在原地修改原始 DataFrame,可以将 inplace 参数设置为 True


3. df.sort_values()

df.sort_values() 是 Pandas 中用于对 DataFrame 进行排序的函数。它允许你按照指定的列或多个列的值对数据进行排序。下面是 sort_values() 函数的详细解释:

语法:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, ignore_index=False, key=None)

参数解释:

  • by:要排序的列的名称或列名的列表。可以传递单个列名或多个列名的列表,以指定多个排序键。
  • axis:指定排序的轴。默认为 0,表示按行排序。如果设置为 1,表示按列排序。
  • ascending:控制排序顺序。默认为 True,表示升序排序(从小到大)。如果设置为 False,则表示降序排序(从大到小)。
  • inplace:可选参数,如果为 True,则会在原始 DataFrame 上进行排序操作,而不创建一个新的 DataFrame。默认为 False,表示创建一个新的 DataFrame 并返回结果。
  • ignore_index:可选参数,如果为 True,则重新索引排序后的 DataFrame,以避免保留原始索引。默认为 False
  • key:可选参数,一个用于自定义排序的函数。这个函数将应用于每个排序键,然后根据其返回值进行排序。

函数的作用:
sort_values() 函数的主要作用是对 DataFrame 中的数据进行排序。你可以按照一个或多个列的值进行排序,以便更好地理解数据或为进一步分析做准备。

示例用法:

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 22, 35],
        'Salary': [50000, 60000, 55000, 70000]}
df = pd.DataFrame(data)

# 按照年龄升序排序
df_sorted_age = df.sort_values(by='Age', ascending=True)

# 显示排序后的 DataFrame
print(df_sorted_age)

输出:

      Name  Age  Salary
2  Charlie   22   55000
0    Alice   25   50000
1      Bob   30   60000
3    David   35   70000

在上面的示例中,我们首先创建了一个包含姓名、年龄和工资的 DataFrame。然后,我们使用 sort_values() 函数按照年龄升序排序了数据。排序后的结果存储在 df_sorted_age 中,原始 DataFrame df 保持不变。

总之,sort_values() 是一个重要的 Pandas 函数,用于在数据分析和处理中对数据进行排序,以便更好地理解数据的特点和趋势。你可以根据需求指定排序键、排序顺序以及是否在原地修改数据。


4. df.rename()

df.rename() 是 Pandas 中用于重命名 DataFrame 列名或索引的函数。它允许你修改 DataFrame 中的列名或索引标签,以便更好地符合你的需求。下面是 df.rename() 函数的详细解释:

语法:

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

参数解释:

  • mapper:可选参数,用于指定新旧标签之间的映射关系。可以是一个字典,其中键是旧标签,值是新标签;也可以是一个函数,该函数接受旧标签并返回新标签。
  • index:可选参数,用于重命名索引标签的字典或函数。
  • columns:可选参数,用于重命名列名的字典或函数。
  • axis:可选参数,用于指定重命名的轴。默认为 None,表示不指定轴。如果设置为 0'index',则表示重命名索引标签;如果设置为 1'columns',则表示重命名列名。
  • copy:可选参数,如果为 True,则返回一个包含重命名后数据的副本,原始 DataFrame 不会被修改。如果为 False,则在原地修改 DataFrame。默认为 True
  • inplace:可选参数,如果为 True,则在原始 DataFrame 上进行重命名操作,而不创建一个新的 DataFrame。默认为 False
  • level:可选参数,用于指定在多层索引 DataFrame 中重命名的级别。

函数的作用:
df.rename() 函数的主要作用是修改 DataFrame 的列名或索引标签,以便更好地反映数据的含义或符合分析的需要。这对于数据清理和准备非常有用。

示例用法:

import pandas as pd

data = {'A': [1, 2, 3],
        'B': [4, 5, 6]}
df = pd.DataFrame(data)

# 重命名列名
df.rename(columns={'A': 'X', 'B': 'Y'}, inplace=True)

# 显示重命名后的 DataFrame
print(df)

输出:

   X  Y
0  1  4
1  2  5
2  3  6

在上面的示例中,我们首先创建了一个包含两列的 DataFrame,然后使用 df.rename() 函数将列名 “A” 和 “B” 重命名为 “X” 和 “Y”。inplace=True 参数表示在原地修改 DataFrame。最后,我们打印出了重命名后的 DataFrame。

总之,df.rename() 是一个有用的 Pandas 函数,用于在数据分析和处理过程中修改 DataFrame 的列名或索引标签,以便更好地表示数据的含义或满足分析需求。可以根据需要选择要重命名的列或索引,以及新的名称。


5. pd.merge()

pd.merge() 是 Pandas 中用于合并(合并)两个 DataFrame 的方法,类似于 SQL 中的 JOIN 操作。这个方法非常有用,可以用于将不同的数据源按照某些关键列或索引合并在一起,以进行数据集成和分析。以下是 .merge() 方法的详细解释:

语法:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, suffixes=('_x', '_y'))

参数解释:

  • left:要合并的左侧 DataFrame。
  • right:要合并的右侧 DataFrame。
  • how:合并的方式,可以是以下几种之一:
    • 'inner':内连接,只保留两个 DataFrame 中共有的行。
    • 'left':左连接,保留左侧 DataFrame 中的所有行,右侧 DataFrame 中没有匹配的用 NaN 填充。
    • 'right':右连接,保留右侧 DataFrame 中的所有行,左侧 DataFrame 中没有匹配的用 NaN 填充。
    • 'outer':外连接,保留两个 DataFrame 中的所有行,没有匹配的用 NaN 填充。
  • on:用于指定连接的列名,这是最常用的连接方式。如果两个 DataFrame 中的列名相同,可以使用这个参数,否则可以使用 left_onright_on 来分别指定左侧和右侧的连接列。
  • left_on:用于指定左侧 DataFrame 中用于连接的列名。
  • right_on:用于指定右侧 DataFrame 中用于连接的列名。
  • left_indexright_index:如果为 True,则使用左侧或右侧 DataFrame 的索引作为连接键,而不使用列名。
  • suffixes:如果左侧和右侧 DataFrame 中有重名的列,可以用 suffixes 参数来指定添加到重名列名后的后缀。

函数的作用:
.merge() 方法用于将两个 DataFrame 按照指定的条件合并在一起,以便进行数据集成和分析。可以根据不同的连接方式(内连接、左连接、右连接、外连接)将两个数据集合并,使得不同数据源的信息可以关联在一起。

示例用法:

import pandas as pd

# 创建两个示例 DataFrame
left_data = {'ID': [1, 2, 3],
             'Name': ['Alice', 'Bob', 'Charlie']}
right_data = {'ID': [2, 3, 4],
              'Age': [25, 30, 22]}
left_df = pd.DataFrame(left_data)
right_df = pd.DataFrame(right_data)

# 使用 merge 进行内连接
merged_df = pd.merge(left_df, right_df, on='ID', how='inner')
print(merged_df)

输出:

   ID     Name  Age
0   2      Bob   25
1   3  Charlie   30

在上述示例中,我们首先创建了两个示例 DataFrame(left_dfright_df),然后使用 .merge() 方法进行了内连接,连接键是 “ID” 列。合并后的结果包含了两个 DataFrame 共有的行。

总之,.merge() 方法是 Pandas 中用于合并两个 DataFrame 的重要工具,允许你根据不同的连接方式将数据集成在一起,以便进行数据分析和处理。你可以根据需要指定连接键、连接方式和其他参数来执行不同类型的合并操作。


题目-条件筛选

1. 大的国家

题目链接

在这里插入图片描述

在这里插入图片描述

这题没啥说的,直接写,个人习惯是先写出 SQL,再根据SQL写成 pandas 形式。

SQL

select 
	name, population, area 
from 
	world 
where population >=25000000 or area >=3000000

python

import pandas as pd

def big_countries(world: pd.DataFrame) -> pd.DataFrame:
    df = world[(world["area"]>=3000000) | (world["population"]>=25000000)]
    return df[["name","population","area"]]
    

2. 可回收且低脂的产品

题目链接

在这里插入图片描述
在这里插入图片描述

也没啥说的,和上一道题一样,

SQL

select 
	product_id 
from 
	products 
where 
	low_fats = "Y" and recyclable = "Y"

Python

import pandas as pd

def find_products(products: pd.DataFrame) -> pd.DataFrame:
    df = products[(products["low_fats"] == "Y") & (products["recyclable"] == "Y")]
    return df[["product_id"]]

3. 从不订购的客户

题目链接

在这里插入图片描述
在这里插入图片描述

涉及到~, isin()rename()方法,上文已给出解析

SQL

select customers.name as 'Customers'
from customers
where customers.id not in
(
    select customerid from orders
);

python

import pandas as pd

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


4. 文章浏览 I

题目链接

在这里插入图片描述

在这里插入图片描述
条件比较多,一步一步写,第一步筛选 author_id 等于 viewer_id ,随后就根据上文的几个方法直接带入既可,
注意事项就是语法格式,还有 inplace=True 这个东西,不要忘了!

SQL

select 
	distinct author_id as id 
from 
	Views 
where 
	author_id = viewer_id 
order by 
	id

python

import pandas as pd

def article_views(views: pd.DataFrame) -> pd.DataFrame:
    df = views[views["viewer_id"] == views["author_id"]]

    df.drop_duplicates(subset=["author_id"], inplace=True)
    df.rename(columns={"author_id":"id"}, inplace=True)
    df.sort_values(by=["id"],inplace=True)

    return df[["id"]]

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

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

相关文章

postgresql-窗口函数种类

postgresql-聚合窗口函数 聚合函数排名窗口函数案例1案例2 取值窗口函数环比增长率同比增长率 聚合函数 常用的聚合函数,例如 AVG、SUM、COUNT 等,也可以作为窗口函数使用 --计算移动平均值 select saledate, amount, avg(amount) over (order by sale…

Leetcode - 361周赛

一&#xff0c;2843. 统计对称整数的数目 这道题直接暴力&#xff0c;要注意的一点是这个数字必须是由 2 * N 位数字组成。 代码如下&#xff1a; class Solution {public int countSymmetricIntegers(int low, int high) {int ans 0;for(int ilow; i<high; i){if(i>1…

threejs的dat.gui辅助工具的使用

threejs的dat.gui辅助工具的使用 安装使用 安装 npm i dat.gui -S 使用 import dat from dat.gui const controlData {rotationSpeed: 0.01,color: #66ccff,wireframe: false } const gui new dat.GUI() const f gui.addFolder(配置) f.add(controlData, rotationSpeed, …

【Proteus仿真】【STM32单片机】血压心率血氧体温蓝牙

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 系统运行后&#xff0c;LCD1604液晶显示心率、血氧、血压和体温&#xff0c;及其阈值&#xff1b;可通过K3键进入阈值设置模式&#xff0c;K1和K2加减调节&#xff0c;K4确定&#xff1b;当检测心率、血氧…

Java JUC 并发编程(笔记)

文章目录 再谈多线程并发与并行顺序执行并发执行并行执行 再谈锁机制重量级锁轻量级锁偏向锁锁消除和锁粗化 JMM内存模型Java内存模型重排序volatile关键字happens-before原则 多线程编程核心锁框架Lock和Condition接口可重入锁公平锁与非公平锁 读写锁锁降级和锁升级 队列同步…

ARMv7-A 那些事 - 2.通用寄存器与流水线

By: Ailson Jack Date: 2023.09.10 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/154.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

Visual Studio 2019 简单安装教程

思路 官方页面下载 – 安装Visual Studio Installer – 安装Visual Studio 2019 下载 打开页面&#xff1a;Visual Studio 2019 生成号和发布日期 | Microsoft Learn 点击需要的版本&#xff0c;跳转后会开始下载在线安装包&#xff0c;这里选择第一个Community版本 安装 …

SpringBoot【基础篇】

一、快速上手 按照要求&#xff0c;左侧选择web&#xff0c;然后在中间选择Spring Web即可&#xff0c;选完右侧就出现了新的内容项&#xff0c;这就表示勾选成功了 关注&#xff1a;此处选择的SpringBoot的版本使用默认的就可以了&#xff0c;需要说一点&#xff0c;SpringBo…

PatchMatchNet 学习笔记 译文 深度学习三维重建

9 PatchMatchNet CVPR-2021 patchmatchnet源码下载 PatchMatchNet 代码注释版 下载链接(注释非常详细,较源码结构有调整,使用起来更方便) PatchMatchNet-CVPR-2021(源码、原文+注释+译文+批注) 9.0 主要特点 金字塔,基于传统的PatchMatch算法,精度高,速度快 Pa…

Redis带你深入学习数据类型set

目录 1、set 2、set相关命令 2.1、添加元素 sadd 2.2、获取元素 smembers 2.3、判断元素是否存在 sismember 2.4、获取set中元素数量 scard 2.5、删除元素spop、srem 2.6、移动元素smove 2.7、集合中相关命令&#xff1a;sinter、sinterstore、sunion、sunionstore、s…

基于SSM的在线购物系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

nrf52832 GPIO输入输出设置

LED_GPIO #define LED_START 17 #define LED_0 17 #define LED_1 18 #define LED_2 19 #define LED_3 20 #define LED_STOP 20设置位输出模式&#xff1a; nrf_gpio_cfg_output(LED_0); 输出高电平:nrf_gpio_pin_set(LED_0); 输…

sqli-labs关卡之一(两种做法)

目录 一、布尔盲注(bool注入) 二、时间盲注(sleep注入) 一、布尔盲注(bool注入) 页面没有报错和回显信息&#xff0c;只会返回正常或者不正常的信息&#xff0c;这时候就可以用布尔盲注 布尔盲注原理是先将你查询结果的第一个字符转换为ascii码&#xff0c;再与后面的数字比较…

[EROOR] SpringMVC之500 回调函数报错

首先&#xff0c;检查一下idea里面的报错的原因&#xff0c;我的是jdk的版本的问题。所以更换一下就可以了。

操作系统:四大特征(并发,共享,虚拟,异步)

1.并发 1.并发的定义 并发:指两个或多个事件在同一时间间隔内发生。 这些事件宏观上是同时发生的&#xff0c;但微观上是交替发生的。 值得注意的是&#xff0c;与并行&#xff08;指两个或多个事件在同一时刻同时发生&#xff09;区分开来。 2.操作系统的并发性 指计算机…

【微信读书】数据内容接口逆向调试01

需求爬取微信读书的某一本书的整本书的内容 增强需求&#xff0c;大批量爬取一批书籍内容 众所周知微信读书是一个很好用的app&#xff0c;他上面书籍的格式很好&#xff0c;质量很高。 本人充值了会员但是看完做完笔记每次还得去翻很不方便&#xff0c;于是想把书籍内容弄下…

【Unity基础】3.脚本控制物体运动天空盒

【Unity基础】3.脚本控制物体运动&天空盒 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;搭建开发环境 &#xff08;1&#xff09;下载visual studio 在我们下载unity编译器的时候&…

十一)Stable Diffussion使用教程:人物三视图

现在我们通过一个个具体的案例,去进阶SD的使用。 本篇案例:绘制Q版人物三视图 1)我们先选择一个偏3D的模型,选择文生图,输入魔法; 2)然后选择触发三视图的Lora:<lora:charturnerbetaLora_charturnbetalora:0.6>,注意这里的名称都是本地重新命名的,非原来C站下…

PLC编码器测速(限幅滤波+中心差分法求导SCL源代码)

M法测速的基本原理,大家可以查看专栏的系列文章,这里不再赘述常用链接如下: PLC通过编码器反馈值计算速度的推荐做法(算法解析+ST代码)_编码器脉冲怎么转换为速度_RXXW_Dor的博客-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC…

十五、Webpack打包图片-js-Vue、Label命令、resolve模块解析

一、webpack打包图片 &#xff08;1&#xff09;加载图片案例准备 为了演示我们项目中可以加载图片&#xff0c;我们需要在项目中使用图片&#xff0c;比较常见的使用图片的方式是两种&#xff1a; img元素&#xff0c;设置src属性&#xff1b;其他元素&#xff08;比如div&…