Python 根据每行上一行中的值更新dataframe当前行属性

Python 根据每行上一行中的值更新dataframe当前行属性,python,pandas,python-2.7,Python,Pandas,Python 2.7,我需要在数据帧上执行以下步骤: df = pd.DataFrame(pd.date_range(start = '2019-01-01', end = '2019-12-31'),columns = ['dt_id']) df["balance"] = np.where(df.index == 0, 100, df["balance"].shift(1) + 1) 将起始值指定给第一行的“balance”属性 根据前一行的值,使用以下公式计算后续行的“余额”值:(前一行余额+1) 我尝试了以

我需要在数据帧上执行以下步骤:

df = pd.DataFrame(pd.date_range(start = '2019-01-01', end = '2019-12-31'),columns = ['dt_id'])
df["balance"] = np.where(df.index == 0, 100, df["balance"].shift(1) + 1)
  • 将起始值指定给第一行的“balance”属性
  • 根据前一行的值,使用以下公式计算后续行的“余额”值:(前一行余额+1)
  • 我尝试了以下步骤:

    创建数据框:

    df = pd.DataFrame(pd.date_range(start = '2019-01-01', end = '2019-12-31'),columns = ['dt_id'])
    
    df["balance"] = np.where(df.index == 0, 100, df["balance"].shift(1) + 1)
    
    已创建名为“balance”的属性:

    df["balance"] = 0
    
    尝试有条件地更新数据帧:

    df = pd.DataFrame(pd.date_range(start = '2019-01-01', end = '2019-12-31'),columns = ['dt_id'])
    
    df["balance"] = np.where(df.index == 0, 100, df["balance"].shift(1) + 1)
    
    结果:

    从我观察到的情况来看,在原始数据帧中更新之前,正在为后续更新检索该值

    “平衡”属性的所需输出:

    • 第0行:100

    • 第1行:101

    • 第2排:102


    依此类推

    如果我理解正确,如果您在您的代码后面添加这行代码,那么您就准备好了:

    df["balance"].cumsum()
    
    0      100.0
    1      101.0
    2      102.0
    3      103.0
    4      104.0
           ...  
    360    460.0
    361    461.0
    362    462.0
    363    463.0
    364    464.0
    

    这是一个累积和,它将其值与前一个值相加,因为您有起始值,然后有起始值,它将执行您想要的操作。

    如果我理解正确,如果您将这行代码添加到您的代码之后,您就准备好了:

    df["balance"].cumsum()
    
    0      100.0
    1      101.0
    2      102.0
    3      103.0
    4      104.0
           ...  
    360    460.0
    361    461.0
    362    462.0
    363    463.0
    364    464.0
    

    它是一个累积和,它将它的值与上一个值相加,因为你有起始值,然后是你想要的值。你的问题是,你想要计算一个数组,而元素是相互依赖的。例如,元素2依赖于数组中的元素1。元素3依赖于元素2,依此类推

    如果有一个简单的解决方案,则取决于您使用的公式,即,是否可以将其矢量化。以下是关于该主题的一个很好的解释:

    在您的情况下,一个简单的循环就可以做到这一点:

    balance = np.empty(len(df.index))
    balance[0] = 100
    for i in range(1, len(df.index)):
      balance[i] = balance[i-1] + 1  # or whatever formula you want to use
    
    请注意,以上是一般解决方案。您的公式可以矢量化,因此也可以使用以下方法生成:

    balance = 100 + np.arange(0, len(df.index))
    

    您遇到的问题是,您想要计算一个数组,而元素之间是相互依赖的。例如,元素2依赖于数组中的元素1。元素3依赖于元素2,依此类推

    如果有一个简单的解决方案,则取决于您使用的公式,即,是否可以将其矢量化。以下是关于该主题的一个很好的解释:

    在您的情况下,一个简单的循环就可以做到这一点:

    balance = np.empty(len(df.index))
    balance[0] = 100
    for i in range(1, len(df.index)):
      balance[i] = balance[i-1] + 1  # or whatever formula you want to use
    
    请注意,以上是一般解决方案。您的公式可以矢量化,因此也可以使用以下方法生成:

    balance = 100 + np.arange(0, len(df.index))
    

    是的,这就是我要找的,谢谢。我会尝试一下,并将其标记为已解决。出于好奇,在一个场景中,我需要在公式上使用前一行的余额来计算当前行的余额,我该怎么做?您也会这样做,因为您只需要起始值。每个值都是previews+1,因此您只需要一个起始值。我说的对吗?是的,这就是我要找的,谢谢。我会尝试一下,并将其标记为已解决。出于好奇,在一个场景中,我需要在公式上使用前一行的余额来计算当前行的余额,我将如何做?您也会这样做,因为您只需要起始值。每个值都是previews+1,因此您只需要一个起始值。我说得对吗?