【问题标题】:Average Previous and Current Row - Pandas平均前一行和当前行 - Pandas
【发布时间】:2017-09-21 12:26:11
【问题描述】:

目标

  • 计算avg_tot_assets,其中avg_tot_assets =(上一年资产+当年资产)/2
  • 计算return_on_asset (ROA) = net income / avg_total_assets

方法

  1. 使用 Quandl 的 API 获取波音财务信息
  2. 创建数据框
  3. 使用 Pandas 遍历数据框并计算每年的平均总资产
  4. 使用 pandas 计算 ROA

工作代码

df = data[['per_fisc_year',
           'consol_net_income_loss',
          'tot_asset',
          'curr_portion_debt',
          'tot_lterm_debt',
           'tot_share_holder_equity']]
df

输出

问题

  1. 我认为循环遍历数据框并不是最有效/最优雅的方式。我研究过使用 groupby 或 index,但不确定如何执行。
  2. 同样,如果我要计算 ROA - 我可以在计算 avg_tot_asset 的同时并行计算 return_on_asset,还是必须独立运行?

【问题讨论】:

    标签: pandas


    【解决方案1】:

    除了窗口函数,您可以使用shift 来获取列的先前值:

    df['avg_tot_assets'] = df['tot_asset'].add(df['tot_asset'].shift(1)) / 2
    

    ROA 计算没有什么新鲜的。我想 pandas/numpy 可以矢量化该计算:

    df['ROA'] = df['consol_net_income_loss'] / df['avg_tot_assets']
    

    【讨论】:

      【解决方案2】:

      对于第一个问题,请查看Pandas Window Functions。这将处理您的avg_tot_assets

      df['avg_tot_assets'] = df.tot_asset.rolling(window=2).mean() 
      

      就并行计算另一列而言,可能有一种方法,但这样做不太可能获得任何性能。你会更好地按顺序进行。像这样:

      df['ROA'] = df.net_income / df.avg_tot_assets
      

      您可以尝试浪费大量时间编写一个复杂的函数,该函数将逐行遍历数据帧并依次计算每个值,然后将输出应用到原始数据帧,但这将是严重 strong> 比内置方法慢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 2018-06-03
        • 1970-01-01
        • 2019-11-09
        • 2015-07-12
        • 2017-01-13
        • 1970-01-01
        相关资源
        最近更新 更多