首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标值后累积和

目标值后累积和
EN

Stack Overflow用户
提问于 2022-05-05 19:05:28
回答 1查看 50关注 0票数 0

英语不是我的母语,所以如果我不能很好地表达自己,我很抱歉。我有一个有三列的dataframe:

代码语言:javascript
复制
index  bad  score
0      1    400
1      0    10
2      1    20
3      0    500
4      1    700
5      0    80
6      0    950

我想订购数据按分数(降),并计算坏率的累积和(df.bad/len(df)),直到一个预先设定的坏率。示例:

代码语言:javascript
复制
index  bad  score
0      0    10
1      1    20
2      0    80
3      1    400
4      0    500
5      1    700
6      0    950

我的第一个坏利率是0.3333。在80分,我的累计停止,因为我击中了目标(0.3333 -(df.bad/len(Df)。继续指数4,我的第二个坏率是0.6666。在700分,我的累计停止,因为我再次击中目标。

谢谢你的帮助。

编辑:更多示例:

更多的例子:

代码语言:javascript
复制
index  bad  score  bad_rate_row rate
0      0    10     0/1          0
1      1    20     1/2          0.5
2      0    80     1/3          0.3333
3      1    400    1/1          1
4      0    500    1/2          0.5
5      1    700    2/3          0.6666
6      0    950    0/1          0
EN

回答 1

Stack Overflow用户

发布于 2022-05-05 19:39:47

你想要这样的东西吗?

代码语言:javascript
复制
(df
 .sort_values(by='score', ignore_index=True)
 .assign(cumbad=lambda d: d['bad'].cumsum().mul(d['bad']).div(d['bad'].sum()))
)

备选方案:

代码语言:javascript
复制
(df
 .sort_values(by='score', ignore_index=True)
 .assign(cumbad=lambda d: d['bad'].where(d['bad'].eq(1))
                          .cumsum().div(d['bad'].sum()).fillna(0))
)

产出:

代码语言:javascript
复制
   index  bad  score    cumbad
0      1    0     10  0.000000
1      2    1     20  0.333333
2      5    0     80  0.000000
3      0    1    400  0.666667
4      3    0    500  0.000000
5      4    1    700  1.000000
6      6    0    950  0.000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72132414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档