匹配两个groupby的索引

Match indexes of two groupby

我需要计算组之间的几个百分比,我正在尝试以最佳方式构建允许我这样做的对象。

假设我有这个框架:

df = pd.DataFrame({ "cluster" : ["A", "A", "B", "B", "A", "B", "C", "C", "C"], "category": ["x", "y", "x", "x", "x", "y", "y", "z", "x"], "result" : [0,1,1,0,0,1,1,1,0]})

为了有一个简单的方法来计算几个百分比,我需要两种尺寸,一种是完整的对象,另一种是过滤器:

r1 = df.groupby(["cluster", "category"]).size()
print(r1)

r2 = df[df['result']==1].groupby(["cluster", "category"]).size()
print(r2)

但是,r2 与 r1 的索引不兼容,当我想在同一个 ax 中绘制结果时最终会带来问题,所以我试图为 r2 使用与 r1 相同的索引,并且这是我发现的最佳方式:

r3 = (r2 + r1 - r1).fillna(0)
print(r3)

你有更好的方法吗?也许将所有信息都放在一个对象中(具有两个命名列)会很棒。

非常感谢!

如果我没理解错的话,你可以使用pd.concat(这样你就会有一个包含两列的数据框):

out = pd.concat([r1, r2], axis=1).fillna(0)
print(out)

打印:

                  0    1
cluster category        
A       x         2  0.0
        y         1  1.0
B       x         2  1.0
        y         1  1.0
C       x         1  0.0
        y         1  1.0
        z         1  1.0