Python 如果多个字段符合条件,是否删除重复项?

Python 如果多个字段符合条件,是否删除重复项?,python,pandas,Python,Pandas,今天我有一个简单的Excel任务要做,我想我应该用一些Python来清理它。这让我想到了熊猫和numpy。如果可能的话,我想知道: 我有这些列和大约5k行: 名字|姓氏|电子邮件|地址|城市 我想删除地址和城市中的重复项,但并非所有行都有电子邮件或姓氏。因此,我想查看该行并删除不包含电子邮件地址的行,保留包含电子邮件地址的行 但是,我有一些重复的行,它们可能具有相同的姓氏,但没有电子邮件,因此我希望确保至少保留其中一行,或者在电子邮件字段中插入NAN或其他内容,以便至少保留其中一行 我猜在伪代码

今天我有一个简单的Excel任务要做,我想我应该用一些Python来清理它。这让我想到了熊猫和numpy。如果可能的话,我想知道:

我有这些列和大约5k行:

名字|姓氏|电子邮件|地址|城市

我想删除地址和城市中的重复项,但并非所有行都有电子邮件或姓氏。因此,我想查看该行并删除不包含电子邮件地址的行,保留包含电子邮件地址的行

但是,我有一些重复的行,它们可能具有相同的姓氏,但没有电子邮件,因此我希望确保至少保留其中一行,或者在电子邮件字段中插入NAN或其他内容,以便至少保留其中一行

我猜在伪代码中应该是这样的:

1. if Last Name & Address & City is a duplicate & Email Address on both rows is blank
             insert a variable into one of the rows Email Address field
2. if Address & City is a duplicate, remove the row that does not have a e-mail address assigned to it.
我已经通过手动进入并执行步骤1使其工作,正如您所猜测的,这不是有趣的lol。所以我想知道是否有可能对熊猫进行操作

以下是示例数据:

       df = pd.DataFrame({
            "First Name": ["Bob", "Ken", "Bobs Business", "Daniel", "Wendy", "Kyle"],
            "Last Name": ["Arnold", "Arnold", "", "Amigo", "Amigo", "Zecke"],
            "Email": ["", "", "Bb@bobsbusiness.com", "amigo@amigo.com",  "", "k@zecke.com"],
            "Address": ["123 Street", "123 Street", "123 Street", "5 Street", "5 Street", "5 Street"],
            "City": ["Boston", "Boston", "Boston", "Concord", "Concord", "Denver"]
        })

预期产出:

First Name Last Name Email                Address        City
Ken         Arnold                       123 Street    Boston
Bobs Business        bb@bobsbusiness.com 123 Street  Boston
Daniel      Amigo    amigo@amigo.com     5 Street      Concord
Kyle        Zecke    k@zecke.com         5 Street      Denver

感谢您的帮助或为我指明了正确的方向!:)

首先,您应该提供示例数据,以便我们可以轻松地在您的数据上测试代码。 我认为你必须做两件事:

  • 对数据进行排序()
  • 删除重复的行()
您必须检查是否使用了None值或emtpy字符串,因为它们在排序时的效果不同,可能您必须将keep更改为“first”

输出:

      First Name Last Name                Email     Address     City
0            Bob    Arnold                       123 Street   Boston
1            Ken    Arnold                       123 Street   Boston
2  Bobs Business            Bb@bobsbusiness.com  123 Street   Boston
3         Daniel     Amigo      amigo@amigo.com    5 Street  Concord
4          Wendy     Amigo                         5 Street  Concord
5           Kyle     Zecke          k@zecke.com    5 Street   Denver

      First Name Last Name                Email     Address     City
2  Bobs Business            Bb@bobsbusiness.com  123 Street   Boston
3         Daniel     Amigo      amigo@amigo.com    5 Street  Concord
1            Ken    Arnold                       123 Street   Boston
5           Kyle     Zecke          k@zecke.com    5 Street   Denver

你可能想看看。此外,您的逻辑可能不完整,因为第二条规则可能会删除这两行。我检查了duplicated,但找不到将其设置为某种类型和条件的方法,即df.duplicated(子集(['Last Name']和['Address']和['City']您可以将多个列作为一个列表传递:
df.duplicated(子集=['Last Name',Address',City']))
。很抱歉,我忘记了数据。我在中添加了一些。不过,您的示例很有效,非常感谢:)
      First Name Last Name                Email     Address     City
0            Bob    Arnold                       123 Street   Boston
1            Ken    Arnold                       123 Street   Boston
2  Bobs Business            Bb@bobsbusiness.com  123 Street   Boston
3         Daniel     Amigo      amigo@amigo.com    5 Street  Concord
4          Wendy     Amigo                         5 Street  Concord
5           Kyle     Zecke          k@zecke.com    5 Street   Denver

      First Name Last Name                Email     Address     City
2  Bobs Business            Bb@bobsbusiness.com  123 Street   Boston
3         Daniel     Amigo      amigo@amigo.com    5 Street  Concord
1            Ken    Arnold                       123 Street   Boston
5           Kyle     Zecke          k@zecke.com    5 Street   Denver