Python 如果多个字段符合条件,是否删除重复项?
今天我有一个简单的Excel任务要做,我想我应该用一些Python来清理它。这让我想到了熊猫和numpy。如果可能的话,我想知道: 我有这些列和大约5k行: 名字|姓氏|电子邮件|地址|城市 我想删除地址和城市中的重复项,但并非所有行都有电子邮件或姓氏。因此,我想查看该行并删除不包含电子邮件地址的行,保留包含电子邮件地址的行 但是,我有一些重复的行,它们可能具有相同的姓氏,但没有电子邮件,因此我希望确保至少保留其中一行,或者在电子邮件字段中插入NAN或其他内容,以便至少保留其中一行 我猜在伪代码中应该是这样的:Python 如果多个字段符合条件,是否删除重复项?,python,pandas,Python,Pandas,今天我有一个简单的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
感谢您的帮助或为我指明了正确的方向!:) 首先,您应该提供示例数据,以便我们可以轻松地在您的数据上测试代码。 我认为你必须做两件事:
- 对数据进行排序()
- 删除重复的行()
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