平均值-上一行和当前行-Pandas

4

目标

  • 计算 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吗,还是必须单独运行这些内容?
2个回答

6

对于第一个问题,请查看Pandas窗口函数。这将使用以下方式处理您的avg_tot_assets

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

就同时计算另一列而言,可能有一种方法,但是这样做不太可能获得更好的性能。最好按顺序进行计算。像这样:

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

您可以尝试编写复杂的函数,逐行遍历数据框并依次计算每个值,然后将输出应用于原始数据框。但是与内置方法相比,这种方法会大大地降低速度。

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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接