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,我想看看他们是否在同一个城市。