Sim*_*mon 2 python numpy while-loop dataframe pandas
问候大家,
我有这个表(没有 Res_Problem):
ID | 问题 | X | 影响 | 概率 | 解决问题 |
---|---|---|---|---|---|
识别号1 | 12 | 数据中心1 | 1 | 2 | (12-2)=10 |
识别号1 | 12 | 数据中心2 | 2 | 2 | (10-4)=6 停止 |
识别号1 | 12 | 数据中心3 | 1 | 0 | 无循环 |
识别号1 | 12 | 数据中心4 | 1 | 0 | 无循环 |
识别号2 | 10 | IDB1 | 1 | 2 | 新循环 (10-2)=8 |
识别号2 | 10 | IDB1 | 1 | 2 | (8-2) = 6 停止 |
我想做一个循环,将影响和概率相乘,直到获得所需值(例如 6),然后停止循环,直到达到 6。但再次开始 ID2 上的循环...等等,任何建议?
我认为它必须是这样的:
while (df['问题'] - df['影响']*df['影响'] < 6): df['循环'] = res
循环应创建“Res_Problem”列
这是一种选择:
s = (df['Problem']
.sub(df['Impact'].mul(df['Prob'])
.groupby(df['ID']).cumsum()
)
)
m = s.le(6).groupby(df['ID']).shift(fill_value=False)
df['Res_Problem'] = s.mask(m)
Run Code Online (Sandbox Code Playgroud)
输出:
ID Problem X Impact Prob Res_Problem
0 ID1 12 IDC1 1 2 10.0
1 ID1 12 IDC2 2 2 6.0
2 ID1 12 IDC3 1 0 NaN
3 ID1 12 IDC4 1 0 NaN
4 ID2 10 IDB1 1 2 8.0
5 ID2 10 IDB1 1 2 6.0
Run Code Online (Sandbox Code Playgroud)