熊猫-给定特定b的条件概率

发布于 2021-01-29 16:15:10

我有两个“ a”和“ b”列的DataFrame。在给定特定的“ b”的情况下,如何找到“ a”的条件概率?

df.groupby('a').groupby('b')

不起作用。假设我在a列中有3个类别,每一个具体的我都有5个b类别。我需要做的是为a的每个班级找到b的上班总数。我试过了apply命令,但是我不知道如何正确使用它。

df.groupby('a').apply(lambda x: x[x['b']] == '...').count()
关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    要查找b每个类实例的类总数,a您可以执行

    df.groupby('a').b.value_counts()
    

    例如,创建如下的DataFrame:

    df = pd.DataFrame({'A':['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'], 'B':['one', 'one', 'two', 'three','two', 'two', 'one', 'three'], 'C':np.random.randn(8), 'D':np.random.randn(8)})
    
         A      B         C         D
    0  foo    one -1.565185 -0.465763
    1  bar    one  2.499516 -0.941229
    2  foo    two -0.091160  0.689009
    3  bar  three  1.358780 -0.062026
    4  foo    two -0.800881 -0.341930
    5  bar    two -0.236498  0.198686
    6  foo    one -0.590498  0.281307
    7  foo  three -1.423079  0.424715
    

    然后:

    df.groupby('A')['B'].value_counts()
    
    A
    bar  one      1
         two      1
         three    1
    foo  one      2
         two      2
         three    1
    

    要将其转换为条件概率,需要除以每个组的总大小。

    您可以与另一个groupby一起使用:

    df.groupby('A')['B'].value_counts() / df.groupby('A')['B'].count()
    
    A
    bar  one      0.333333
         two      0.333333
         three    0.333333
    foo  one      0.400000
         two      0.400000
         three    0.200000
    dtype: float64
    

    或者,您可以将lambda功能应用于组:

    df.groupby('a').b.apply(lambda g: g.value_counts()/len(g))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看