首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从pd数据帧中获取联合概率

从pd数据帧中获取联合概率
EN

Stack Overflow用户
提问于 2020-11-03 04:34:50
回答 1查看 692关注 0票数 0

我有以下数据帧

代码语言:javascript
复制
{'state': {7192: 'healthy',
  7193: 'healthy',
  7194: 'healthy',
  7195: 'Non healthy',
  7196: 'Non healthy'},
 'type': {7192: 'W', 7193: 'A', 7194: 'W', 7195: 'W', 7196: 'A'}}

我希望有与此df相关的联合概率。

P(状态=健康,类型= A),P(状态=健康,类型= W),P(状态=不健康,类型= A),P(状态=不健康,类型= W)

我尝试了groupby方法,但它不起作用。做这件事最有效的方法是什么?

编辑:为了澄清一点,我想计算每对情侣(状态,类型)的出现次数。在上面的示例中,这应该是P(状态=健康,类型= A) = 1/5,P(状态=健康,类型= W) = 2/5 P(状态=不健康,类型= A) = 1/5,P(状态=不健康,类型= W) = 1/5

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 05:40:33

似乎您可以使用DataFrame.value_counts(normalize=True)来实现您想要的功能。请注意,DataFrame.value_countspandas >= 1.1.0中的新功能。如果您使用的是较旧的版本,则可以使用不同的方法获得相同的结果。

首先将您的字典转换为pd.DataFrame

代码语言:javascript
复制
df = pd.DataFrame(data)

Pandas版本>= 1.1.0

代码语言:javascript
复制
probs = df.value_counts(["state", "type"], normalize=True)

print(probs)
healthy      W       0.4
             A       0.2
Non healthy  W       0.2
             A       0.2

# Select individual probabilitiy:
healthy_a_prob = probs[("healthy", "A")]

print(healthy_a_prob)
0.2

如果您的pandas早于1.1.0,请将上面示例中的第一行替换为:

代码语言:javascript
复制
probs = df.groupby("state")["type"].value_counts() / len(df)

# rest is the exact same

如果您想要一个交叉表的概率表,我建议您结合使用pd.crosstabnormalize=True

代码语言:javascript
复制
crosstab_ptable = pd.crosstab(df["state"], df["type"], normalize=True)

print(crosstab_ptable)
type           A    W
state
Non healthy  0.2  0.2
healthy      0.2  0.4

如果你也对边际概率感兴趣,你可以使用margins参数:

代码语言:javascript
复制
crosstab_ptable = pd.crosstab(df["state"], df["type"], margins=True, normalize=True)

print(crosstab_ptable)
type           A    W  All
state
Non healthy  0.2  0.2  0.4
healthy      0.2  0.4  0.6
All          0.4  0.6  1.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64652945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档