gpt4 book ai didi

Python Pandas - 类似于 ISIN 但 "contains"与 "exact"匹配

转载 作者:太空狗 更新时间:2023-10-30 01:06:25 26 4
gpt4 key购买 nike

我正在使用 Python Pandas 处理两个数据框。第一个数据框包含来自客户数据库 的记录(名字、姓氏、电子邮件等)。第二个数据框包含一个域名列表,例如gmail.com、hotmail.com 等

当电子邮件地址包含来自第二个列表的域名时,我试图从客户数据框中排除记录。换句话说,当客户的电子邮件地址域出现在域黑名单中时,我需要将其删除。

这里是示例数据框:

>>> customer = pd.DataFrame({'Email': [
"bob@example.com",
"jim@example.com",
"joe@gmail.com"], 'First Name': [
"Bob",
"Jim",
"Joe"]})

>>> blacklist = pd.DataFrame({'Domain': ["gmail.com", "outlook.com"]})

>>> customer
Email First Name
0 bob@example.com Bob
1 jim@example.com Jim
2 joe@gmail.com Joe
>>> blacklist
Domain
0 gmail.com
1 outlook.com

我想要的输出是:

>>> filtered_list = magic_happens_here(customer, blacklist)
>>> filtered_list
Email First Name
0 bob@example.com Bob
1 jim@example.com Jim

到目前为止我尝试了什么:

  1. 为了消除特定 电子邮件地址,我过去使用过 df1[df1['email'].isin(~df2['email']) 。 .. 但显然对我在这里描述的用例没有帮助。
  2. 我试过使用 df.apply,但语法不正确,我想实际数据集的性能会很糟糕。示例:df1['Email'].apply(lambda x: x for i in ['gmail.com', 'outlook.com'] if i in x)。尽管这看起来应该可行,但我得到了 TypeError: 'generator' object is not callable

剩下的问题是:

  1. 最好的方法是什么?
  2. 为什么生成器不可调用?
  3. ...最终,当电子邮件地址域存在于排除集中时,我如何从数据框中排除客户?

最佳答案

代码-

import pandas as pd


customer = pd.DataFrame({'Email': [
"bob@example.com",
"jim@example.com",
"joe@gmail.com"], 'First Name': [
"Bob",
"Jim",
"Joe"]})

blacklist = pd.DataFrame({'Domain': ["gmail.com", "outlook.com"]})

invalid_emails = tuple(blacklist['Domain'])

df = customer[customer['Email'].apply(lambda s: not s.endswith(invalid_emails))]

print(df)

输出-

             Email First Name
0 bob@example.com Bob
1 jim@example.com Jim

关于Python Pandas - 类似于 ISIN 但 "contains"与 "exact"匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com