Pandas:更好的分组和平均值

mgdq6dx1  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(183)

我有一个所有公司股票价格的电子表格,我想更有效地计算移动平均线。目前我有一些代码可以工作,但需要相当长的时间来运行。我想知道有什么替代方法来做同样的事情,但更有效,或在某种程度上利用Pandas的优势。
下面是我尝试在代码中完成的工作流:
1.首先,我希望获得每个公司的20天滚动/移动平均值,并将其作为列添加到 Dataframe (sma_20)中。
1.从那里我想计算股票价格超过这20天平均值的天数。
1.最后,我想把这个数字转换成一个百分比,作为参考,一个交易年有252天,我想看看在这252天中,有多少天股票的交易高于它的移动平均线。

prices_df['sma_20'] = prices_df.groupby('ticker').rolling(20)['closeadj'].mean().reset_index(0,drop=True)
prices_df['above_sma_20'] = np.where(prices_df.closeadj > prices_df.sma_20, 1, 0)
prices_df['above_sma_20_count'] = prices_df.groupby('ticker').rolling(252)['above_sma_20'].sum().reset_index(0,drop=True)
prices_df['above_sma_20_pct'] = prices_df['above_sma_20_count'] / 252
jhiyze9q

jhiyze9q1#

我会将数据重新排列成n(日期)x m(股票代码)数组,并使用numpy处理滚动平均值,
给定一个df,其中有100家公司和253天来自雅虎财经,

第一个
将概率和对应的公司分配给一个新的 Dataframe ,

df_result = pd.DataFrame(sum(df_n > sma_20)/len(df_n), columns=['probability'])
df_result['company'] = df.columns
df_result = df_result.sort_values(by='probability', ascending=False).reset_index(drop=True)
df_result
###
    probability company
0      0.814229    FTNT
1      0.774704    ASML
2      0.747036    INTU
3      0.747036   GOOGL
4      0.743083    AVGO
..          ...     ...
95     0.450593    BIIB
96     0.446640      JD
97     0.438735    PCAR
98     0.418972    ATVI
99     0.407115      ZM

[100 rows x 2 columns]

相关问题