1

我知道这可能很简单,但我一直在尝试解决这个问题,并且我需要它来完成很多功能。

我有一个包含 2 列的 DataFrame,均包含股价数据。

我想在一个名为“returns”的新数据框中计算 2 个新列,每个列的名称与第一个相同(即“AAPL”和“GOOG”)。

我使用此过程获取原始数据并创建“数据”数据框:

names = ['AAPL', 'GOOG']

def get_data(stock, start, end):
    return web.get_data_yahoo(stock, start, end)['Adj Close']

data = pd.DataFrame({n: get_data(n, '1/1/2009', '6/1/2012') for n in names})

我知道可以使用(来自熊猫库)生成回报:

returns = pd.DataFrame(index=data.index)
returns['*COLUMN A*'] = data['*COLUMN A*'].pct_change()

但是我猜我需要使用某种循环来迭代“名称”或列,但我无法得到任何工作。

任何帮助将不胜感激。如果我说得含糊不清,我很抱歉,但这是我的第一个问题,我已经通过论坛搜索了 30 分钟 :)

4

1 回答 1

0

您可以在整个 df 上使用 pct_change

In [15]: df = DataFrame(np.random.randint(20,size=20).reshape(10,2),
    columns=['AAPL','GOOG'],index=date_range('20130101',periods=10))+50

In [16]: df
Out[16]: 
            AAPL  GOOG
2013-01-01    53    54
2013-01-02    66    64
2013-01-03    50    59
2013-01-04    53    57
2013-01-05    67    65
2013-01-06    61    55
2013-01-07    68    52
2013-01-08    64    65
2013-01-09    62    62
2013-01-10    66    50

In [17]: 100*df.pct_change()
Out[17]: 
                 AAPL       GOOG
2013-01-01        NaN        NaN
2013-01-02  24.528302  18.518519
2013-01-03 -24.242424  -7.812500
2013-01-04   6.000000  -3.389831
2013-01-05  26.415094  14.035088
2013-01-06  -8.955224 -15.384615
2013-01-07  11.475410  -5.454545
2013-01-08  -5.882353  25.000000
2013-01-09  -3.125000  -4.615385
2013-01-10   6.451613 -19.354839
于 2013-05-19T20:55:04.813 回答