Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有集合交集的GroupBy和aggregate_Python_Pandas_Group By_Set_Pandas Groupby - Fatal编程技术网

Python 具有集合交集的GroupBy和aggregate

Python 具有集合交集的GroupBy和aggregate,python,pandas,group-by,set,pandas-groupby,Python,Pandas,Group By,Set,Pandas Groupby,我有一个带有集合列的熊猫数据框: 将熊猫作为pd导入 数据帧({'group_var':[1,1,2,2],'set_var':[set([0,1]),set([1,2]),set([3,4]),set([5,6,7])) df 组变量集变量 0 1 {0, 1} 1 1 {1, 2} 2 2 {3, 4} 3 2 {5, 6, 7} 我希望通过groupby对group\u var进行分

我有一个带有集合列的熊猫数据框:

将熊猫作为pd导入
数据帧({'group_var':[1,1,2,2],'set_var':[set([0,1]),set([1,2]),set([3,4]),set([5,6,7]))
df
组变量集变量
0          1      {0, 1}
1          1      {1, 2}
2          2      {3, 4}
3          2   {5, 6, 7}
我希望通过
groupby
group\u var
进行分组,并获得所有相应的
set\u var
集合的交集,如下所示:

组变量集变量
0          1      {1}
1          2      {}
或类似的系列:

设置变量
1  {1}
2  {}

我该如何优雅地去做呢?性能是最高优先级。

使用
groupby
agg
,并使用
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

@哈夫潘:很高兴见到你:)谢谢。经过很长一段时间才这样来。