假设我们有以下数据框:

import pandas as pd

df_dict = {'term1':[0.87,0.65],'term2':[0.87,0.40],
               'term3':[0.87,0.55],'term4':[0.87,0.70],
              'term5':[0.87,0.85],'term6':[0.87,0.90],
              }

df = pd.DataFrame(df_dict,index = ['Revenue','Cost'])


这给了我们:

python - 按标量递增乘以 Pandas 行,直到达到条件-LMLPHP

将所有terms的成本连续均匀提高1%,直到term4的利润为负的最佳方法是什么?是否可以保存结果以准备绘图(x轴=利润,y轴=成本增加百分比)?

最佳答案

经过一点数学运算,您正在寻找的数字就是这个的term4

np.log(df.loc['Revenue']/df.loc['Cost'])/np.log(1.01)


这是:

term1    29.297604
term2    78.090736
term3    46.086401
term4    21.849814
term5     2.337295
term6    -3.407078
dtype: float64


因此,这里的答案是22。放在一起:

num = np.ceil(np.log(df.loc['Revenue']/df.loc['Cost'])
                  .div(np.log(1.01))).loc['term4']
num = int(num)

inc_cost = pd.DataFrame(df.loc['Cost'].values * np.cumprod([1.01]*num)[:,None],
             columns=df.columns,
             index=[f'Cost_{i}' for i in range(1,num+1)])


输出:

            term1     term2     term3     term4     term5     term6
Cost_1   0.656500  0.404000  0.555500  0.707000  0.858500  0.909000
Cost_2   0.663065  0.408040  0.561055  0.714070  0.867085  0.918090
Cost_3   0.669696  0.412120  0.566666  0.721211  0.875756  0.927271
Cost_4   0.676393  0.416242  0.572332  0.728423  0.884513  0.936544
Cost_5   0.683157  0.420404  0.578056  0.735707  0.893359  0.945909
Cost_6   0.689988  0.424608  0.583836  0.743064  0.902292  0.955368
Cost_7   0.696888  0.428854  0.589674  0.750495  0.911315  0.964922
Cost_8   0.703857  0.433143  0.595571  0.758000  0.920428  0.974571
Cost_9   0.710895  0.437474  0.601527  0.765580  0.929632  0.984317
Cost_10  0.718004  0.441849  0.607542  0.773235  0.938929  0.994160
Cost_11  0.725184  0.446267  0.613618  0.780968  0.948318  1.004102
Cost_12  0.732436  0.450730  0.619754  0.788778  0.957801  1.014143
Cost_13  0.739761  0.455237  0.625951  0.796665  0.967379  1.024284
Cost_14  0.747158  0.459790  0.632211  0.804632  0.977053  1.034527
Cost_15  0.754630  0.464388  0.638533  0.812678  0.986824  1.044872
Cost_16  0.762176  0.469031  0.644918  0.820805  0.996692  1.055321
Cost_17  0.769798  0.473722  0.651367  0.829013  1.006659  1.065874
Cost_18  0.777496  0.478459  0.657881  0.837303  1.016725  1.076533
Cost_19  0.785271  0.483244  0.664460  0.845676  1.026893  1.087298
Cost_20  0.793124  0.488076  0.671105  0.854133  1.037162  1.098171
Cost_21  0.801055  0.492957  0.677816  0.862674  1.047533  1.109153
Cost_22  0.809065  0.497886  0.684594  0.871301  1.058008  1.120244

关于python - 按标量递增乘以 Pandas 行,直到达到条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58125966/

10-12 18:04