力扣:183. 从不订购的客户(Python3)

题目:

Customers 表:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+
在 SQL 中,id 是该表的主键。
该表的每一行都表示客户的 ID 和名称。

Orders 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| customerId  | int  |
+-------------+------+
在 SQL 中,id 是该表的主键。
customerId 是 Customers 表中 ID 的外键( Pandas 中的连接键)。
该表的每一行都表示订单的 ID 和订购该订单的客户的 ID。

找出所有从不点任何东西的顾客。

以 任意顺序 返回结果表。

结果格式如下所示。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 1:

输入:

Customers table:
+----+-------+
| id | name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+
Orders table:
+----+------------+
| id | customerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+


输出:

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

解法:

判断Customers表中的id在Orders表中的customersId列中是否出现,返回未出现的。

知识点:

1.提取DataFrame中的列并以DataFrame格式返回:使用df[['列名]]。

2.DataFrame.rename(self, mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None, errors='ignore'):mapper: 类似字典或函数,类似Dict或函数的转换,以应用于该轴的值,要么使用 mapper和 axis与指定axis的目标进行mapper转换,要么使用index和columns;index: 类似字典或函数,指定axis (mapper, axis=0相当于index=mapper)的替代方法;columns: 类似字典或函数,指定axis (mapper, axis=1 相当于columns=mapper)的替代方法;axis:{0 or 'index', 1 or 'columns'}, 默认为0(即' index '),int或str,轴到目标与mapper,可以是轴名(' index ', ' columns ')或数字(0,1);copy:bool, 默认True,还要复制底层数据;inplace:bool, 默认为 False,是否返回新的DataFrame,如果为真,则忽略copy的值;level:int或level name, 默认 None,对于多索引,只能在指定的级别重命名标签;errors:{‘ignore’, ‘raise’}, 默认 ‘ignore’,如果‘raise’,则报告错误,如果 ‘ignore’,现有的键将被重命名,额外的键将被忽略。比如重命名列:

data = [[1, 'Joe'], [2, 'Henry'], [3, 'Sam'], [4, 'Max']]
customers = pd.DataFrame(data, columns=['id', 'name']).astype({'id': 'Int64', 'name': 'object'})
print(customers.rename(columns={'name': 'Customers'}))

代码:

import pandas as pd

def find_customers(customers: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:
    customers['buy'] = [customerId in list(orders['customerId']) for customerId in customers['id']]
    return customers[customers['buy'] == False][['name']].rename(columns={'name': 'Customers'})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值