如何用对象测量pandas group中组的重叠?

时间:2013-11-25 12:22:15

标签: python group-by pandas

我的pandas数据框看起来像

example_df = pd.DataFrame({"class": ["A", "A", "A", "B", "B", "B"], "id": [1,2,3,4,5,6], "value": [100, 100, 101, 101, 102, 103]})

example_df
  class  id  value
0     A   1    100
1     A   2    100
2     A   3    101
3     B   4    101
4     B   5    102
5     B   6    103

我想知道,对于每个class A或B,它的value是多么独特;也就是说,它与另一个类共享多少个值。 (您可以假设只有两个类。)例如,给定上面的数据帧,A与B共享一个值。

通过将列分成set并手动计算交叉点来做到这一点并不难,但这并不是很好。在熊猫中有优雅的方式吗?

2 个答案:

答案 0 :(得分:0)

我认为集合计算没问题,您可以使用numpy.intersect1d()

import numpy as np
g = example_df.groupby("class")
a = g.get_group("A")
b = g.get_group("B")
np.intersect1d(a.value, b.value)

这是groupby值的另一种方法,这看起来不错,但我觉得它比它慢 intersect1d版本:

(example_df.groupby("value")["class"].nunique() > 1).sum()

答案 1 :(得分:0)

如果你这样查询:

>>> example_df[['class', 'value']].drop_duplicates().groupby('value').size()
value
100      1
101      2
102      1
103      1

然后,您可以使用2检查所有记录。如果你提供所需的输出,我可能会更具体。