假设我们有以下数据框:
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'])
这给我们:
在所有terms
上连续增加成本(例如,统一提高1%,直到term4
的利润为负)的最佳方法是什么?是否可以保存结果以准备绘图(x轴=利润,y轴=成本增加百分比)?
答案 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)])