【问题标题】:Pandas complex calculation based on other columnsPandas 基于其他列的复杂计算
【发布时间】:2017-06-02 13:45:44
【问题描述】:

我已经成功地为其他列创建了基于算术的新列,但现在我有一个更具挑战性的需求,即首先根据多列的匹配选择元素,然后执行数学运算并遇到语法问题。

ind_df_qtrly[10:16]
ticker  comp_name   per_fisc_year   per_type    per_fisc_qtr    per_end_date_x  sales   tot_revnu   zacks_x_sector_desc zacks_m_ind_desc    per_end_date_y  mkt_val
562170  AVX AVX CORP    2007    Q   1   2006-06-30  366.408 366.408 Computer and Technology ELECTRONICS 2008-12-31  1353.95
562215  AVX AVX CORP    2007    Q   2   2006-09-30  374.648 374.648 Computer and Technology ELECTRONICS 2008-12-31  1353.95
562260  AVX AVX CORP    2007    Q   3   2006-12-31  378.088 378.088 Computer and Technology ELECTRONICS 2008-12-31  1353.95
562305  AVX AVX CORP    2007    Q   4   2007-03-31  379.351 379.351 Computer and Technology ELECTRONICS 2008-12-31  1353.95
562350  AVX AVX CORP    2008    Q   1   2007-06-30  383.158 383.158 Computer and Technology ELECTRONICS 2008-12-31  1353.95
562395  AVX AVX CORP    2008    Q   2   2007-09-30  400.706 400.706 Computer and Technology ELECTRONICS 2008-12-31  1353.95

我正在尝试计算从 2008 年第二季度开始的“tot_revnu”列的尾随 12 个月值,这意味着对于每个“股票代码”,我需要在 DF 中创建一个新列,它将总结 4 个季度(2008 年)的结果-Q2、2008-Q1、2007-Q4 和 2007-Q3)。我使用年度数据计算增长也做了同样的事情,但事实证明这个练习非常具有挑战性。

我可以用这样的年度数据做到这一点

        # Annual Create the Pivot Table
        ind_table=pd.pivot_table(ind_df_annual, values='tot_revnu',index=['ticker','comp_name','zacks_x_sector_desc','zacks_m_ind_desc','mkt_val'],columns=['per_fisc_year'],aggfunc=np.sum)

        # Annual calculate Simple and FD Growth and add columns to PivotTable
        ind_table[str(prev_year)+'-Ann Simple']= (ind_table[(prev_year)]  - ind_table[(prev2_year)])/ ind_table[(prev2_year)]
        ind_table[str(current_year)+'-Ann Simple']= (ind_table[current_year]  - ind_table[prev_year])/ ind_table[prev_year]
        ind_table[str(current_year)+'-Ann FD']= (ind_table[(str(current_year))+'-Ann Simple']  - ind_table[(str(prev_year))+'-Ann Simple'])/ ind_table[(str(prev_year))+'-Ann Simple']

【问题讨论】:

  • 我已经做了同样的事情来使用年度数据计算增长 ...这次尝试在哪里?
  • 你看过df.groupby吗?
  • 谢谢,我查看了 df.groupby 并使用了 df.pivot_table。我已经使用年度数据在另一个数据集上成功完成了这项工作。我将使用此信息更新问题,

标签: python pandas


【解决方案1】:

您也许可以使用滚动窗口。像这样的:

ind_df_qtrly['cumulative_tot_revnu'] = ind_df_qtrly['tot_revnu'].rolling(4).sum()

文档:pandas.DataFrame.rolling

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 2022-10-14
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多