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
@哈夫潘:很高兴见到你:)谢谢。经过很长一段时间才这样来。