Python 如何查找数据帧中是否有两个实体位于同一组中?

Python 如何查找数据帧中是否有两个实体位于同一组中?,python,pandas,Python,Pandas,我有一个数据帧,如下所示: City Name 0 Seattle Alice 1 Seattle Bob 2 Portland Mallory 3 Portland Bob 给定两个名字,我想知道它们是否相同。 做这件事的有效方法是什么? 我想按“城市”分组,但我不知道如何检查两个名字是否在同一组中 (我使用的数据框更大,有数百万行,我想多次在同一个城市找到两个或更多的人)您可以使用: names = ['Alice

我有一个数据帧,如下所示:

       City     Name
0   Seattle    Alice
1   Seattle      Bob
2  Portland  Mallory       
3  Portland      Bob
给定两个名字,我想知道它们是否相同。 做这件事的有效方法是什么? 我想按“城市”分组,但我不知道如何检查两个名字是否在同一组中

(我使用的数据框更大,有数百万行,我想多次在同一个城市找到两个或更多的人)

您可以使用:

names = ['Alice', 'Bob']
df[df.Name.isin(names)].groupby('City').Name.nunique() > 1
屈服

City
Portland    False
Seattle      True
Name: Name, dtype: bool
(..).any()括起来,以获得摘要
True
/
False
结果

如果一个人可以多次在同一个
城市
,您可以先使用
。删除重复的(['Name','City')

包装在函数中:

def same_city(df, n1, n2):
    same = df[df.Name.isin(names)].groupby('City').Name.nunique() > 1
    return same, same.any()

result, summary = same_city(df, 'Alice', 'Bob')
收益率:

City
Portland    False
Seattle      True
Name: Name, dtype: bool
True
您可以使用:

names = ['Alice', 'Bob']
df[df.Name.isin(names)].groupby('City').Name.nunique() > 1
屈服

City
Portland    False
Seattle      True
Name: Name, dtype: bool
(..).any()括起来,以获得摘要
True
/
False
结果

如果一个人可以多次在同一个
城市
,您可以先使用
。删除重复的(['Name','City')

包装在函数中:

def same_city(df, n1, n2):
    same = df[df.Name.isin(names)].groupby('City').Name.nunique() > 1
    return same, same.any()

result, summary = same_city(df, 'Alice', 'Bob')
收益率:

City
Portland    False
Seattle      True
Name: Name, dtype: bool
True
试试这个:

def bothInCity(df, n1, n2):
    s = {n1, n2}
    c = df.groupby('City').Name.apply(set)
    chk = lambda x: s.issubset(x)
    return c.loc[c.apply(chk)]
然后像这样使用它:

bothInCity(df, 'Bob', 'Alice')

City
Seattle    {Bob, Alice}
Name: Name, dtype: object
试试这个:

def bothInCity(df, n1, n2):
    s = {n1, n2}
    c = df.groupby('City').Name.apply(set)
    chk = lambda x: s.issubset(x)
    return c.loc[c.apply(chk)]
然后像这样使用它:

bothInCity(df, 'Bob', 'Alice')

City
Seattle    {Bob, Alice}
Name: Name, dtype: object

使用
groupby
的一种可能方法:

x = "Mallory"
y = "Alice"
any(any(names[1].str.contains(x)) and any(names[1].str.contains(y)) for names in df.groupby('City').Name)

# False

使用
groupby
的一种可能方法:

x = "Mallory"
y = "Alice"
any(any(names[1].str.contains(x)) and any(names[1].str.contains(y)) for names in df.groupby('City').Name)

# False

谢谢,但我不寻找成员数超过1人的团体。给定两个名字,例如Alice和Bob,我想看看他们是否在同一个城市。谢谢,但我不寻找成员数超过1人的团体。给定两个名字,例如Alice和Bob,我想看看他们是否在同一个城市。