在Python函数遍历数据帧时,从Python函数中更新变量的值

在Python函数遍历数据帧时,从Python函数中更新变量的值,python,function,dataframe,Python,Function,Dataframe,我试图创建一个Python函数,该函数将遍历数据帧的行,并使用变量执行一些简单的算术。但是我还想用函数返回的乘积填充原始变量 目标是根据给定的起点(本例中为177.1美元),将数据帧(目前包含季度年平均百分比)转换为近似的美元数字。但我只能在每次后续迭代都给出一个更新的基本美元数字的情况下才能做到这一点 此版本的函数在以下情况下工作: newnum = 177.1 def process_wages(x): if type(x) is str: return x

我试图创建一个Python函数,该函数将遍历数据帧的行,并使用变量执行一些简单的算术。但是我还想用函数返回的乘积填充原始变量

目标是根据给定的起点(本例中为177.1美元),将数据帧(目前包含季度年平均百分比)转换为近似的美元数字。但我只能在每次后续迭代都给出一个更新的基本美元数字的情况下才能做到这一点

此版本的函数在以下情况下工作:

newnum = 177.1
def process_wages(x):
    if type(x) is str:
        return x
    elif x:
        return (x / 400) * newnum + newnum
    else:
        return
        
newdf.applymap(process_wages)
但我想添加一行,可能看起来像这样:

    else:
        return
    newnum = x
newdf.applymap(process_wages)
newnum = 177.1
def process_wages(x):
    global newnum
    if type(x) is str:
        return x
    elif x:
        newnum = (x / 400) * newnum + newnum
        return newnum
    else:
        return
newstuff = newdf.applymap(process_wages)
…当然,这不起作用-返回此错误:

UnboundLocalError: local variable 'newnum' referenced before assignment
更新:以下是输入数据框:

    Date    Percent
0   2002Q1  3.5
1   2002Q2  3.6
2   2002Q3  3.1
3   2002Q4  2.6
4   2003Q1  2.9
... ... ...
70  2019Q3  3.0
71  2019Q4  3.0
72  2020Q1  3.3
73  2020Q2  2.9
74  2020Q3  2.7
75 rows × 2 columns
下面是我从working函数得到的输出(当然,问题是每个迭代都是从相同的原始newnum值开始工作的):


global
可用于操作函数外部的变量。

global
可用于操作函数外部的变量。

使用Maria的提示,我将我的函数修改为如下:

    else:
        return
    newnum = x
newdf.applymap(process_wages)
newnum = 177.1
def process_wages(x):
    global newnum
    if type(x) is str:
        return x
    elif x:
        newnum = (x / 400) * newnum + newnum
        return newnum
    else:
        return
newstuff = newdf.applymap(process_wages)

…现在我可以将newnum传递回全局变量和我的数据帧。

使用Maria的提示,我修改了我的函数,如下所示:

    else:
        return
    newnum = x
newdf.applymap(process_wages)
newnum = 177.1
def process_wages(x):
    global newnum
    if type(x) is str:
        return x
    elif x:
        newnum = (x / 400) * newnum + newnum
        return newnum
    else:
        return
newstuff = newdf.applymap(process_wages)

…现在我可以将newnum传递回全局变量和我的dataframe。

请共享一个具有预期输出的输入dataframe示例,以便更好地理解。我已添加了输入dataframe。请共享一个具有预期输出的输入dataframe示例,以便更好地理解。我已添加了输入dataframe。谢谢。但是,我如何将newnum的新值传递回数据帧呢。在函数中添加“newnum=(x/400)*newnum+newnum”只会更新全局newnum。谢谢。但是,我如何将newnum的新值传递回数据帧呢。在函数中添加“newnum=(x/400)*newnum+newnum”只会更新全局newnum。