GroupBy和集合交集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GroupBy和集合交集相关的知识,希望对你有一定的参考价值。

我有一个带有set列的pandas DataFrame:

import pandas as pd

df = pd.DataFrame({'group_var': [1,1,2,2], 'sets_var': [set([0, 1]), set([1, 2]), set([3, 4]), set([5, 6, 7])]})
df

   group_var sets_var
0          1      {0, 1}
1          1      {1, 2}
2          2      {3, 4}
3          2   {5, 6, 7}

我希望groupby group_var并获得所有相应的sets_var集合的交集,如下所示:

   group_var sets_var
0          1      {1}
1          2      {}

或像这样的系列:

   sets_var
1  {1}
2  {}

我怎么会优雅地去做呢?绩效是头等大事。

答案

使用groupbyagg,并使用set.intersection减少。

df.groupby('group_var', as_index=False).agg(lambda x: set.intersection(*x))

   group_var sets_var
0          1      {1}
1          2       {}

如果性能绝对重要,我们可以尝试摆脱lambda

from functools import partial, reduce 
import operator

p = partial(reduce, operator.and_)
df.groupby('group_var', as_index=False).agg(p)

   group_var sets_var
0          1      {1}
1          2       {}

但是,这仅执行成对交叉,因此您的里程可能会有所不同。


或者,作为一个系列,

pd.Series({
    k: set.intersection(*g.tolist()) 
    for k, g in df.groupby('group_var')['sets_var']})

1    {1}
2     {}
dtype: object

以上是关于GroupBy和集合交集的主要内容,如果未能解决你的问题,请参考以下文章

用java编写程序,求集合的并集、交集和差集

Excel 怎样求差集,并集和交集还有容错

python--集合增删改 交集 差集 并集 反交集 子集和超集

并集、交集、差集的概念是啥?

java集合运算:求交集,并集,集合差

SQL集合运算:差集、交集、并集