我有一个数据框如下:
City Name
0 Seattle Alice
1 Seattle Bob
2 Portland Mallory
3 Portland Bob
鉴于两个名字我想知道它们是否相同。 有效的方法是什么? 我正在考虑按“城市”分组,但我不知道如何检查两个名字是否属于同一组。
(我使用的数据帧要大得多,有数百万行,我想多次在同一个城市找到两个或更多人)
答案 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