匹配两个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
我需要计算组之间的几个百分比,我正在尝试以最佳方式构建允许我这样做的对象。
假设我有这个框架:
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