python - Pandas - 给定特定 b 的条件概率

标签 python pandas

我有包含两列“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/

相关文章:

python - dev_appserver.py 无法发出 SSL 请求的解决方法

python - 内存 SQL 查询

python - 使 DataFrame 相对于特定列保持平衡

python - Pandas 专栏创建

python - 我是否正确地将傅里叶变换应用于此数据框? [EXAFS X 射线吸收数据框]

python - 如何在 python 中将 OpenCV 图像传递给 Tesseract?

python - 有没有办法将 azure Eventhub 检查点存储到远程存储桶(例如 Google 云存储桶)?

python - 打印直方图

pandas - '\u200d1500'是什么?

python - 如何使 Datetimeindex 不是数据框中的索引