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

肖恩

我有一个这样的数据框:

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

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

任何想法如何实现这一点?

第一步是找到具有 1 个以上 unique 的名称,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_duplicatesandvalue_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

方法3: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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有效地将一列中的值替换为另一列Pandas DataFrame

如何在Pandas中创建新列,条件是要重复另一列的值?

如何替换一列中的重复值以使其基于Pandas中的另一列而唯一?

从列表的pandas列中,如何删除不在列表的另一列中的所有值?

Pandas DataFrames:在一个列中有效查找下一个值,而另一列具有更大的值

根据另一列(Python,Pandas)中的值删除一列的重复项

选择值大于pandas中另一列的所有列名称

我在数据框中有两列,一列具有列名,另一列没有列名,如何在python pandas上为它们命名?

计算Pandas DataFrame中每行中同一列中有多少行在给定列中具有较大的值

如果多个列中的任何一个在Pandas中有重复的行,则删除行

一列中有多个重复值的行时如何选择第一行

如何选择具有在一列中重复但在另一列中具有不同值的列值的行?

将列值连接到另一列pandas中的所有值的更快方法,对第一列中的所有值执行

如何计算特定列中的项目/值在 Pandas 数据帧的另一列/其他列中重复的次数?

Pandas 根据另一列的条件有选择地覆盖列中的值

查找特定列的最大值,但在 Pandas 中返回另一列

如何在pandas中找到包含另一列的所有可能值的行值

Pandas:在第二列中有两个不同值的一列中查找重复项

根据Pandas df中另一列中的最大值删除重复行

Mysql - 如何查询一列的重复值但在不同的列中有不同的值?

Python pandas - 为另一列中的每个不同值显示一列中记录数最多的值

基于pandas中一列等于另一列的不同行返回值

从 Pandas Dataframe 中选择一列中具有相同值而另一列中仅丢失的行

pandas:根据另一列中的值获取具有相应索引的精确对应值

如果值,則從另一列中獲取新列,如果沒有,則從另一列中取值 Python Pandas

Pandas - 根据后一列中是否存在值过滤一列中具有相同值和另一列中多个值的行

有没有办法从另一列中减去一列的值,并使用 python 在 pandas 的新列中得到结果?

在列表中没有另一列列值的 pandas 中填写 na

Pandas Python - 如何对客户 ID 进行分组、检查一列是否包含文本以及在另一列中有相应的输出?