首页 > 其他分享 >pandas笔记(二)-- 从不订购的顾客 (数据表连接,主键与外键)

pandas笔记(二)-- 从不订购的顾客 (数据表连接,主键与外键)

时间:2024-03-06 17:33:05浏览次数:17  
标签:Customers -- 外键 id 数据表 pd 主键

题目描述

找出所有从不点任何东西的顾客,以任意顺序返回结果

测试用例

输入

  • Customers table:
id name
1 Joe
2 Henry
3 Sam
4 Max
  • Orders table:
id customerId
1 3
2 1

输出

Customers
Henry
Max

解析

数据表连接的问题核心在于连接条件的编码实现, 这里先引入两个概念, 主键外键

  • 主键:用于保证数据的唯一性, 不能重复, 也不能为空, 例如身份证号, 学号等在数据表中通常被视为主键
  • 外键:用于在表之间建立连接, 外键可以有重复的, 也可以存在空值

所谓连接条件,就是明确主键和外键之间的映射关系(有点集合论内味了)

一言以蔽之,找到列 table_A["主键"] 与 table_B["外键"], 此类问题便不难解决, 以本题为例:

不难看出,"id" 就是 Customer 表的主键,而 Orders 表中的 "customerId" 则作为 Customers 表中 "id" 的外键

显然,集合 Orders["customerID"] 是 Customers["id"] 的真子集,表示点单的顾客id,那么其差集便是我们
要找的征信名单(某种意义上是这样的)

到此,我们的问题就转化成了一个关于集合的计算问题:

先确定 Customers["id"] 与 Orders["customerId"] 的差集,即从不点任何东西的顾客id
据此从 Customers 表中返回对应的人名,注意此时返回的 Dataframe 列名仍为 name, 需要我们重命名为 Customers

代码如下:

import pandas as pd

def find_customers(customers: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:
    df:pd.DataFrame = customers[~customers["id"].isin(orders["customerId"])]
    return df[["name"]].rename(columns={"name": "Customers"})

标签:Customers,--,外键,id,数据表,pd,主键
From: https://www.cnblogs.com/KevinScott0582/p/18057071

相关文章

  • 【go】go错误,panic:assignment to entry in nil map 问题记录
    一个go的map相关的panic错误背景:在获取多个数据时,从数据库取到多条数据,需要把多条数据返回给前端,定义一个res返回值,为map[string]any类型,在赋值后运行发生panic:assignmenttoentryinnilmap原因:在声明map类型的变量后,直接进行赋值操作,此时未初始化该变量,所以它的值是nil,......
  • asp.net core 7+ 调用类库的控制器
    直入主题,用原版ioc的话只需要现在类库中引用包 然后就和普通控制器一样,继承ControllerBase,然后标记上特性就可以使用 如果是使用autofac作为ioc,那么就要稍微改一下builder.Host.UseServiceProviderFactory(newAutofacServiceProviderFactory());使用autofac代替......
  • nginx反向代理服务器实现postgreSQL
    可访问的地址:192.168.1.200:9856不可访问的地址:192.168.214.133:32222(pg库的地址)在192.168.1.200服务器上安装nginx,设置一个监听的端口(9856),将地址二192.168.214.133:32222映射到这个端口(版本要大于nginx1.9.xxx,stream和http是同级关系,在Navicat上通过连接主机-192.168.1......
  • a-modal使用hooks封装状态逻辑并添加全屏切换效果
    /hooks/useModal.jsimport{nextTick,ref}from'vue'import{isFunction}from"lodash-es";exportfunctionuseModal(){ //标题 //执行ok、cancel方法 constvisible=ref(false) constloading=ref(false) consthideModal=()=>{......
  • docker构建arm编译环境
    利用docker快速搭建arm环境进行源码编译及代码测试准备安装好docker环境。启动multiarch/qemu-user-static跨平台模拟窗口sudodockerrun--rm--privilegedmultiarch/qemu-user-static--reset-pyes编写Dockerfile构建arm镜像#第一阶段:准备编译环境和源码#......
  • vue中sass的使用
    前言:这里是用vue2开发的,vue3的sass安装方法有部分不一样。一、安装相关包[email protected]@7.3.1--save-devnpmlsnode-sasssass-loader//查看安装情况//如果报错可能是安装版本有问题,可以卸载后安装node版本对应的s......
  • 前端css阴影画图
    在线演示地址:css阴影画图一,在css中有一个box-shadow属性,可以设置元素的阴影。.item{width:50px;height:50px;background:#009688;box-shadow:50px0red,100px0px#000;}效果:二,box-shadow可以添加多个。.item{width:50px;height:......
  • P1332 血色先锋队
    思路:BFS这道题思路挺简单的。每个被感染的设置被感染的时间,然后将其放到队列中。已经被感染的就不要重复设置值了。#include<bits/stdc++.h>usingnamespacestd;constintmaxn=505;intn,m,a,b;pair<int,int>pr;intdx[4]={0,-1,1,0},dy[4]={-1,0,0,1......
  • Elasticsearch集群生产配置
    集群配置在组建集群时,需要额外添加集群相关的配置,如节点角色、集群发现、初始主节点、主节点选举和安全认证等,以下配置均在上篇创建Elasticsearch单机实例的基础上搭建。设置集群名称vielasticsearch.yml#统一集群名字cluster.name:my-application#移除该配置discover......
  • Cesium在vue3中的安装、使用
    1.cesium插件引入,vite-plugin-cesium是一个专门为Vite构建工具定制的插件,用于在Vite项目中轻松使用Cesium库。它简化了在Vite项目中集成Cesium的过程,并提供了一些额外的功能和配置选项。而直接安装Cesium库,你需要手动配置Vite项目以确保正确引入和使用Cesium。这......