[英]Pandas Groupby then cumulative percentage of the groups
所以我的数据集看起来像这样,我想先按 TSI 列对我的数据集进行分组,然后为每个分组的 TSI 找到 cum%
F TSI | FONS | 暨%ONS |
---|---|---|
A1020 | 0.5 | |
A1020 | 1.3 | |
A1020 | 2.2 | |
A1020 | 3.1 | |
B1020 | 0.5 | |
B1020 | 1.4 | |
D1020 | 0.5 | |
D1020 | 1.4 |
我如何找到每组的累积百分比所以我得到
F TSI | FONS | 暨%ONS |
---|---|---|
A1020 | 0.5 | 7.142% |
A1020 | 1.3 | 25.71% |
A1020 | 2.2 | 57.13% |
A1020 | 3.0 | 100% |
B1020 | 0.5 | 26.315% |
B1020 | 1.4 | 100% |
D1020 | 0.5 | 26.3% |
D1020 | 1.4 | 100% |
a = df.groupby(['TSI'])['Final ONS'].cumsum()
b = df.groupby(['TSI'])['Final ONS'].sum()
g = df.groupby(['TSI'])['Final
ONS'].cumsum(axis=0)/df.groupby(['TSI'])['Final ONS'].sum()
g = pd.DataFrame(g)
g
这段代码给了我 nan 值
这是一种方法:
(i) groupby
"F_TSI" 并为每个组找到 "F_ONS" 的 cumsum
(ii) groupby
"F_TSI" 并为每个组转换 "F_ONS" 的总和
(iii) 将 (i) 除以 (ii) 得到百分比
gb_obj = df.groupby('F_TSI')['F_ONS']
df['Cum%ONS'] = gb_obj.cumsum() / gb_obj.transform('sum') * 100
Output:
F_TSI F_ONS Cum%ONS
0 A1020 0.5 7.042254
1 A1020 1.3 25.352113
2 A1020 2.2 56.338028
3 A1020 3.1 100.000000
4 B1020 0.5 26.315789
5 B1020 1.4 100.000000
6 D1020 0.5 26.315789
7 D1020 1.4 100.000000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.