如何查找两个实体是否在数据框中位于同一组中?

时间:2016-06-24 18:33:06

标签: python pandas

我有一个数据框如下:

       City     Name
0   Seattle    Alice
1   Seattle      Bob
2  Portland  Mallory       
3  Portland      Bob

鉴于两个名字我想知道它们是否相同。 有效的方法是什么? 我正在考虑按“城市”分组,但我不知道如何检查两个名字是否属于同一组。

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

3 个答案:

答案 0 :(得分:1)

您可以使用:

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结果。

如果一个人可以在同一个City中多次,则可以先使用.drop_duplicates(['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

答案 1 :(得分:1)

使用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

答案 2 :(得分:0)

试试这个:

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