熊猫-给定特定b的条件概率
我有两个“ 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()
-
要查找
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))