python - 数据透视表索引中的聚合
问题描述
所以让我再试一次。我创建了一个包含以下内容的数据透视表:
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 并从贬低者中减去促进者,而忽略被动。
这里有没有人做过这样的事情?
解决方案
很难说没有看到你是如何得到你的原始数据的,但是你可以通过替换你的最后一行来得到你想要的结果:
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
推荐阅读
- javascript - 计算数组中的空字符串
- apache-spark - 用spark写csv时如何处理汉字?
- flutter - Flutter 将两个页面按顺序推送到导航器
- python-3.x - 并行化/线程化一个大的for循环| Python
- sql - 在 BigQuery 中将每月支出除以每日支出
- gremlin - 如何使用 graph.OpenManagement() 获取顶点标签 gremlin 的模式
- android - 视频编码器中输入表面的颜色格式
- docker - 如何在 docker-compose 中绑定卷以进行搬运工 docker swarm 部署?
- swift - 如何从 Swift 5 中的智能相册中仅获取图像?
- python - Python Pandas.to_csv 无法将带有分号(;)的列导出为一列