2013-03-25 42 views
1

进出口新的大熊猫,我试图从今天运行在每一行使用的收盘价从昨天一个计算和价格。即:从熊猫数据帧前一天访问一行应用

for 2011-07-26: 
    new_column = max(df.high['2011-07-25'], df.close['2011-07-26']) 

我想过使用遍历所有行迭代,但认为使用df.apply函数会更有效。但是,我无法弄清楚如何从我的函数中访问前几天的收盘价格。

这是我的数据框的一个片段。

   open high  low close 
date          
2011-07-22 1597.6 1607.7 1597.5 1601.5 
2011-07-25 1618.2 1620.3 1609.4 1612.2 
2011-07-26 1610.7 1617.5 1608.0 1616.8 

最好的办法是完成这个吗?

回答

1

你可以做shift第一:

In [8]: df['yesterday_high'] = df['high'].shift() 

In [9]: df 
Out[9]: 
       open high  low close yesterday_high 
date              
2011-07-22 1597.6 1607.7 1597.5 1601.5    NaN 
2011-07-25 1618.2 1620.3 1609.4 1612.2   1607.7 
2011-07-26 1610.7 1617.5 1608.0 1616.8   1620.3 

然后你就可以走yesterday_high和关闭列的最大值:

In [11]: df[['yesterday_high', 'close']].max(axis=1) 
Out[11]: 
date 
2011-07-22 1601.5 
2011-07-25 1612.2 
2011-07-26 1620.3 

In [12] df['new_col'] = df[['yesterday_high', 'close']].max(axis=1) 

或者:

In [13]: df.apply(lambda x: max(x['yesterday_high'], x['close']), axis=1) 
Out[13]: 
date 
2011-07-22 1601.5 
2011-07-25 1612.2 
2011-07-26 1620.3 
+0

,但我想取近今天的高点到昨天收盘。看起来这只是从今天的高位收高。 – CraigH 2013-03-25 11:15:45

+0

@CraigH这完全是,我的错误/误读。 – 2013-03-25 11:17:31

+0

@CraigH对不起,我已更新,这是你之后? – 2013-03-25 11:38:14