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

Group  |  Source  |  Name
___________________________
  A    |    X     |  Jolly
  A    |    X     |  Stone
  A    |    X     |  Jolly
  A    |    Y     |  Sand
  B    |    X     |  Sand
  B    |    X     |  Stone
  B    |    Y     |  Stone
  C    |    X     |  Sand
  C    |    X     |  Stone

我想找出所有的Group个,其中每组Source个没有共同的Name个.基本上在上面的例子中,我想要Group A,因为Source(XY)Name的所有分组都不共享公共值.在这个例子中,我们可以假设只有2个Source(XY),并且不是所有Group个都有超过1个Source.我只对Groups感兴趣,Sources XY,没有Name个十字路口.

生成的数据帧应如下所示:

Group  |  Source  |  Name
___________________________
  A    |    X     |  Jolly
  A    |    X     |  Stone
  A    |    X     |  Jolly
  A    |    Y     |  Sand

我已经试过了,在Group上做了一个grouby,然后为链式filter方法提供了一个函数,如下所示:

def find_no_intersection(df):
    return (
        len(df[df.Source == 'X'].Name.values) > 0 and 
        len(df[df.Source == 'Y'].Name.values) > 0 and 
        (
            len(
                set(df[df.Source == 'X'].Name.values) & 
                set(df[df.Source == 'Y'].Name.values)
            ) == 0
        )
    )

df.groupby(['Group']).filter(find_no_intersection)

这条路对吗?有更好的方法吗?

推荐答案

这里有一种使用nunique()的方法

df.loc[df.groupby('Group')['Name'].transform(lambda x: x.size == x.nunique())]

输出:

  Group Source   Name
0     A      X  Jolly
1     A      X  Stone
2     A      Y   Sand

更新以回答:

(df.loc[
    df['Group'].map(
        df.groupby(['Group','Source'])['Name']
        .agg(set)
        .groupby(level=0)
        .agg(lambda x: len(set.intersection(*x))==0))
        ])

输出:

  Group Source   Name
0     A      X  Jolly
1     A      X  Stone
2     A      X  Jolly
3     A      Y   Sand

Python相关问答推荐

如何比较numPy数组中的两个图像以获取它们不同的像素

处理(潜在)不断增长的任务队列的并行/并行方法

标题:如何在Python中使用嵌套饼图可视化分层数据?

将数据框架与导入的Excel文件一起使用

数据抓取失败:寻求帮助

在Mac上安装ipython

try 将一行连接到Tensorflow中的矩阵

Python列表不会在条件while循环中正确随机化'

如何更新pandas DataFrame上列标题的de值?

为什么\b在这个正则表达式中不解释为反斜杠

下三角形掩码与seaborn clustermap bug

在matplotlib中使用不同大小的标记顶部添加批注

我对这个简单的异步者的例子有什么错误的理解吗?

判断Python操作:如何从字面上得到所有decorator ?

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

如何合并具有相同元素的 torch 矩阵的行?

为用户输入的整数查找根/幂整数对的Python练习

使用polars. pivot()旋转一个框架(类似于R中的pivot_longer)

极地数据帧:ROLING_SUM向前看

Parsel无法访问嵌套元素