如何在pandas中将两个groupby对象相除?

6

I have the following code:

import numpy as np
import pandas as pd
obs = pd.DataFrame({
        'storm': [1, 1, 1, 1, 0, 0, 0, 0], 
        'lightning': [1, 1, 0, 0, 1, 1, 0, 0], 
        'thunder': [1, 0, 1, 0, 1, 0, 1, 0],
        'p': [0.20, 0.05, 0.04, 0.36, 0.04, 0.01, 0.03, 0.27]
    })
g1=obs.groupby(['lightning','thunder']).agg({'p':'sum'})
g2=obs.groupby(['lightning','thunder','storm']).agg({'p':'sum'})

这提供了如下信息:

图片描述在此输入

现在如何通过较少详细的分组划分更详细的分组(计算百分比)?

我阅读了这篇Pandas percentage of total with groupby,但无法推导出如何为我的情况进行重写。


P是什么,百分比是多少?从概念上讲,这似乎毫无意义。如果索引不相同,如何将一个数据框除以另一个数据框?也许需要更多信息才能回答这个问题。 - Woody Pride
为什么索引不同?这些是条件概率。因此,没有闪电和雷声的概率为63%。在此基础上,没有风暴的概率为(27/63),有风暴的概率为(36/63)。 - Dims
1个回答

9
使用g2.unstack()将最后一级转换为列。然后在列上进行广播除法。最后再次使用stack
g2.unstack().div(g1.p, axis=0).stack()

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接