gpt4 book ai didi

python - GroupBy 和集合交集聚合

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:00 25 4
gpt4 key购买 nike

我有一个带有集合列的 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 reduce。

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

关于python - GroupBy 和集合交集聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333798/

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