繁体   English   中英

Pandas Groupby 然后累积的组百分比

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM