英语不是我的母语,所以如果我不能很好地表达自己,我很抱歉。我有一个有三列的dataframe:
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)),直到一个预先设定的坏率。示例:
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分,我的累计停止,因为我再次击中目标。
谢谢你的帮助。
编辑:更多示例:
更多的例子:
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发布于 2022-05-05 19:39:47
你想要这样的东西吗?
(df
.sort_values(by='score', ignore_index=True)
.assign(cumbad=lambda d: d['bad'].cumsum().mul(d['bad']).div(d['bad'].sum()))
)备选方案:
(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))
)产出:
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.000000https://stackoverflow.com/questions/72132414
复制相似问题