我有这个数据框:
grade type
0 402 A
1 312 B
2 321 C
...
如果类型是 A 并且等级列中的值高于 100,我想无限期地乘以 0.7,直到它的值低于 100。我没有找到一个好的方法,现在我正在使用这段代码如下:
df.loc[(df['type'] == 'A') & (df['grade'] > 100),'grade'] = df['grade']*0.7
(I repeat that 100 times and cross my fingers for 'grade' to be below 100)
我可以这样做几次,如果没有达到,我会强制为 100,但是我不想在 df 中有很多相等的值,而且我也不能在其中放入随机组件.
有没有更好的方法来做到这一点(最好使用 Pandas)?
您可以使用np.log
(自然对数)计算所需的功率,您可以使用它进一步计算降低以下值所需的乘数100
:
df.loc[df.type.eq('A') & df.grade.gt(100), 'grade'] = df.grade * np.power(0.7, np.floor(np.log(100 / df.grade) / np.log(0.7)) + 1)
df
# grade type
#0 96.5202 A
#1 312.0000 B
#2 321.0000 C
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句