我有包含两列“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()
最佳答案
要为 a
类的每个实例查找类 b
的总数
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))
关于python - Pandas - 给定特定 b 的条件概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33468976/