使用Pandas中的一个函数创建多个新列

时间:2013-05-19 20:20:28

标签: function dataframe pandas

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

我有一个包含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})

我知道可以使用(来自pandas库)生成返回:

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

但是我猜我需要使用某种循环来迭代“名字”或列,但是我无法使用任何东西。

非常感谢任何帮助。我很抱歉,如果我一直很模糊,但这是我的第一个问题,我通过论坛搜索了30分钟:)

1 个答案:

答案 0 :(得分: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