gpt4 book ai didi

python - 过滤组内的值集交集

转载 作者:行者123 更新时间:2023-12-05 04:26:40 25 4
gpt4 key购买 nike

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

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在哪里s股不常见Name秒。基本上在上面的例子中,我想要 Group A作为 Source 的所有分组( XY ) Name我们没有共同的值(value)观。对于这个例子,我们可以假设只有 2 个 Source s ( XY ) 而不是全部 Group有超过 1 个 Source .我只对 Group 感兴趣s 与 Source s XY没有 Name路口。

生成的 DataFrame 应如下所示:

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

我试过,做了一个 groubyGroup然后向链接的 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 - 过滤组内的值集交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72987271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com