gpt4 book ai didi

python - 在 Pandas 中,如何选择在一列中有重复但在另一列中有不同值的行?

转载 作者:行者123 更新时间:2023-12-05 08:36:56 30 4
gpt4 key购买 nike

我有一个这样的数据框:

import pandas as pd
records = [{'Name':'John', 'Country':'Canada'}, {'Name':'John', 'Country':'Canada'},
{'Name':'Mary', 'Country':'US'}, {'Name':'Mary', 'Country':'Canada'},
{'Name':'Mary', 'Country':'US'}, {'Name':'Stan', 'Country':'UK'},
{'Name':'Stan', 'Country':'UK'}]
df = pd.DataFrame(records)
df
Name        Country
0 John Canada
1 John Canada
2 Mary US
3 Mary Canada
4 Mary US
5 Stan UK
6 Stan UK

我想测试具有不同国家/地区值的名称。在这种情况下,我只想看到玛丽,因为她在国家/地区列中同时拥有美国和加拿大。我可以排除 John 和 Stan,因为他们的记录都来自同一个国家。

有什么想法可以实现吗?

最佳答案

第一步是找到具有多个唯一 Country 的名称,然后您可以在数据框上使用 loc 以仅过滤这些值。

方法一:groupby

# groupby name and return a boolean of whether each has more than 1 unique Country
multi_country = df.groupby(["Name"]).Country.nunique().gt(1)

# use loc to only see those values that have `True` in `multi_country`:
df.loc[df.Name.isin(multi_country[multi_country].index)]

Name Country
2 Mary US
3 Mary Canada
4 Mary US

方法 2:drop_duplicatesvalue_counts

您可以遵循相同的逻辑,但使用 drop_duplicatesvalue_counts 而不是 groupby:

multi_country = df.drop_duplicates().Name.value_counts().gt(1)

df.loc[df.Name.isin(multi_country[multi_country].index)]

Name Country
2 Mary US
3 Mary Canada
4 Mary US

方法三:drop_duplicatesduplicated

注意:这会产生略有不同的结果:您只会看到 Mary 的独特值,这可能是需要的,也可能不需要...

您可以删除原始帧中的重复项,并仅返回去重帧中具有多个条目的名称:

no_dups = df.drop_duplicates()

no_dups[no_dups.duplicated(keep = False, subset="Name")]

Name Country
2 Mary US
3 Mary Canada

关于python - 在 Pandas 中,如何选择在一列中有重复但在另一列中有不同值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67231430/

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