按标量递增乘以熊猫行,直到达到条件

时间:2019-09-26 23:34:26

标签: python pandas

假设我们有以下数据框:

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'])

这给我们:

enter image description here

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

2 个答案:

答案 0 :(得分:1)

我将使用一些代数,因为这可能是最有效的。您正在解决0 = revenue - cost*1.01**x。就是x = log_1.01(R/C)。按照term4的值,在利润为负之前,x的最小整数是21。


但是,通过编程,您可以使用while循环:

data = df['term4']
n = 0
while data['Revenue'] - data['Cost'] * 1.01**n > 0:
    n += 1

答案 1 :(得分:1)

经过一点数学运算,您要查找的数字是其中的'web' => [ // Other middleware... \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, ],

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)])