考虑到Pandas的数据帧特性,如何计算一个简单的移动平均值

2024-05-16 01:22:03 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python3.6

我有一个Pandas数据帧,使用以下代码从面板转换而来:

stocks = ['AAPL', 'JPM', 'JNJ', 'PG', 'XOM', 'VZ', 'IEF']
pnl = web.get_data_yahoo(stocks, start, end, interval = 'd')
df = pnl.to_frame().unstack(level=1)
df.columns = df.columns.swaplevel(0,1)

如果我在控制台中运行df,它将以以下格式返回(带“Open”、“Low”、“Adj Close”等):

^{pr2}$

现在,当我试图计算一个简单的移动平均值时,我遇到了一个问题,比如说AAPL,使用:df['30sma_AAPL'] = df['AAPL']['Adj Close'].rolling(window=30, min_periods=0).mean()。在

这个命令添加了新的列,但是没有将值放在df['AAPL']组中(我不知道group是否是正确的单词?)。例如,如果我运行df['AAPL'],它会专门为AAPL输出'adjclose'、'Close'、'High'等。基本上,我希望有一个循环来计算每只股票的sma并将其值放入其组中。这个数据帧有可能吗?在

编辑:我想要的输出(假的):

minor             IEF         JNJ         JPM          PG          VZ  
               Volume      Volume      Volume      Volume      Volume   
Date                                                                    
2017-11-17   941200.0   4112100.0   8989200.0   5919900.0  18732200.0   
2017-11-16  1749200.0   4193800.0   9808000.0   7205100.0  13818000.0   
2017-11-15  1933100.0   4811500.0  15384100.0   6688100.0  15726500.0 


minor             IEF         JNJ         JPM          PG          VZ  
               30_sma      30_sma      30_sma      30_sma      30_sma   
Date                                                                    
2017-11-17      100.0          50          25          26          45   
2017-11-16         25          40         100          89         100   
2017-11-15         75          30          12          75          60 

Tags: columns数据dfclosepgsmavolumestocks
1条回答
网友
1楼 · 发布于 2024-05-16 01:22:03

IIUC,我想你想用从多索引列中进行元组切片的方法。在

df.loc[:,(slice(None),'Adj Close')].rolling(window=30, min_periods=0)\
  .mean()\
  .rename(columns={'Adj Close':'Moving Avg Adj Close'})

编辑另一个语法(fromSO Post,作者@TedPetrou),用于从多重索引中进行选择:

^{pr2}$

输出:

^{3}$

相关问题 更多 >