首页 > 解决方案 > 数据透视表索引中的聚合

问题描述

所以让我再试一次。我创建了一个包含以下内容的数据透视表:

df3.reset_index(inplace=True)
surveys = df3.groupby(['cohort','nps']).agg({'id': pd.Series.nunique})
surveys['%'] = surveys['id'] / surveys.id.sum()

返回:

cohort    status       count     %
---------------------------------
2017-01 sad         188  0.009276
        ok           53  0.002615
        happy       253  0.012483
2017-02 sad         174  0.008585
        ok          113  0.005575
        happy       247  0.012187
2017-03 sad         221  0.010904
        ok          60   0.002960
        happy       299  0.014752

等等。

我试图弄清楚如何才能获得专门针对他们各自群组的百分比。

理想情况下,它看起来像:

2017-01 sad         188  0.38
        ok          53   0.11
        happy       253  0.51

然后我可以解开 nps 并从贬低者中减去促进者,而忽略被动。

这里有没有人做过这样的事情?

标签: pythonpandas

解决方案


很难说没有看到你是如何得到你的原始数据的,但是你可以通过替换你的最后一行来得到你想要的结果:

surveys['%'] = surveys['id'] / surveys.id.sum()

和:

surveys['%'] = surveys.groupby('cohort')['count'].transform(lambda x: x/sum(x))

例如,从您的数据框开始,例如:

>>> surveys
    cohort status  count
0  2017-01    sad    188
1  2017-01     ok     53
2  2017-01  happy    253
3  2017-02    sad    174
4  2017-02     ok    113
5  2017-02  happy    247
6  2017-03    sad    221
7  2017-03     ok     60
8  2017-03  happy    299

然后:

>>> surveys['%'] = surveys.groupby('cohort')['count'].transform(lambda x: x/sum(x))
>>> surveys
    cohort status  count         %
0  2017-01    sad    188  0.380567
1  2017-01     ok     53  0.107287
2  2017-01  happy    253  0.512146
3  2017-02    sad    174  0.325843
4  2017-02     ok    113  0.211610
5  2017-02  happy    247  0.462547
6  2017-03    sad    221  0.381034
7  2017-03     ok     60  0.103448
8  2017-03  happy    299  0.515517

推荐阅读