我具有以下数据框,并且我正在尝试计算指标:
Date saldo
0 2018-01-02 94.0
1 2018-01-03 92.0
2 2018-01-04 90.0
3 2018-01-06 86.0
4 2018-01-07 84.0
5 2018-01-08 82.0
6 2018-01-09 80.0
7 2018-01-11 76.0
8 2018-01-12 72.0
9 2018-01-13 70.0
我使用了iterrows方法,并且正常工作,返回了预期的输出。
data = 0
n = 0
c= 0
V=0
recompra = 35
qtd = 40
leadtime = 10
Data = []
Valor = []
for index, row in dk.iterrows():
if (row['saldo'] + c) < recompra:
data += 1
V = row['saldo'] + c
if data == leadtime:
n += 1
c = qtd * n
data = 0
else:
V = row['saldo'] + c
df = pd.DataFrame(list(zip(Data, Valor)), columns=['Data', 'Valor'])
当我尝试使用apply()应用相同的方法时,它起作用了,但是,它从“ saldo”列返回了相同的输出。
def optimize(row):
data = 0
n = 0
c= 0
recompra = 35
qtd = 40
leadtime = 10
if (row['saldo'] + c) < recompra:
data += 1
return row['saldo'] + c
if data == leadtime:
n += 1
c = (qtd) * n
data = 0
else:
return row['saldo'] + c
df['Simular'] = df.apply(optimize, axis=1)
我从第二种方法中得到的是同一列的副本:
Date saldo Simulado
0 2018-01-02 94.0 94.0
1 2018-01-03 92.0 92.0
2 2018-01-04 90.0 90.0
3 2018-01-06 86.0 86.0
4 2018-01-07 84.0 84.0
5 2018-01-08 82.0 82.0
6 2018-01-09 80.0 80.0
7 2018-01-11 76.0 76.0
8 2018-01-12 72.0 72.0
9 2018-01-13 70.0 70.0
答案 0 :(得分:0)
您应用的函数始终返回row ['saldo'] + c,因为数据==提前期永远不会为真。当c等于0时,您的代码似乎行为正确;将['saldo']列的副本附加为['Simular']。
如果要获得不同的结果,则应更改变量或语句。