【问题标题】:How to measure overlap of groups in pandas groupby objects?如何测量熊猫 groupby 对象中组的重叠?
【发布时间】:2013-11-25 12:22:15
【问题描述】:

我有一个 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,它的 values 有多独特;也就是说,它与其他类共享多少值。 (您可以假设只有两个类。)例如,给定上面的数据框,A 与B 共享一个值。

通过将列分解为sets 并手动计算交叉点来做到这一点并不难,但这不是很好。在 pandas 中是否有一种优雅的方式来做到这一点?

【问题讨论】:

    标签: python group-by pandas


    【解决方案1】:

    我觉得set计算还可以,可以用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()
    

    【讨论】:

      【解决方案2】:

      如果你这样查询:

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

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

      【讨论】:

        猜你喜欢
        • 2015-03-03
        • 2019-02-24
        • 2020-03-23
        • 2022-09-24
        • 2016-10-31
        • 2016-05-16
        • 2019-04-07
        • 2019-03-20
        • 1970-01-01
        相关资源
        最近更新 更多