2024-06-17 08:00:11 发布
网友
我有如下数据帧:
City Name 0 Seattle Alice 1 Seattle Bob 2 Portland Mallory 3 Portland Bob
给定两个名字,我想知道它们是否在同一个地方。 什么是有效的方法? 我在考虑按“城市”分组,但我不知道如何检查两个名字是否在同一组中。你知道吗
(我使用的数据帧要大得多,有数百万行,我想多次在同一个城市找到两个或更多的人)
试试这个:
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
您可以使用:
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结果。你知道吗
(..).any()
True
False
如果一个人可以在同一个City中多次出现,您可以先使用.drop_duplicates(['Name', 'City')。你知道吗
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
使用groupby的一种可能方法:
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
试试这个:
然后像这样使用:
您可以使用:
收益率
用
(..).any()
括起来以获得摘要True
/False
结果。你知道吗如果一个人可以在同一个
City
中多次出现,您可以先使用.drop_duplicates(['Name', 'City')
。你知道吗包装在函数中:
收益率:
使用
groupby
的一种可能方法:相关问题 更多 >
编程相关推荐