【问题标题】:Using apply() instead of iterrows on Dataframe rows在 Dataframe 行上使用 apply() 而不是 iterrows
【发布时间】:2023-03-03 08:51:25
【问题描述】:

我有以下数据框,我正在尝试计算一个指标:

    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

【问题讨论】:

标签: python pandas loops


【解决方案1】:

您的应用函数总是返回 row['saldo'] + c,因为 data == leadtime 永远不会为真。 c 等于 0,您的代码似乎表现正确;将列 ['saldo'] 的副本附加为 ['Simular']。

如果你想要不同的结果,你应该改变你的变量或你的陈述。

【讨论】:

    猜你喜欢
    • 2013-11-09
    • 2019-09-28
    • 2021-12-24
    • 2021-10-17
    • 2022-11-25
    • 2019-12-18
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多