引用自己的Pandas专栏

时间:2017-01-05 15:18:51

标签: python python-2.7 python-3.x pandas

我的数据框如下:

            Open   High    Low  Close     
Date                                                                            
2014-03-31  10.61  10.61  10.61  10.61        
2014-04-01  10.66  10.66  10.66  10.66         
2014-04-02  10.67  10.67  10.67  10.67        
2014-04-03  10.64  10.64  10.64  10.64        
2014-04-04  10.57  10.57  10.57  10.57     
2014-04-07  10.50  10.50  10.50  10.50      
2014-04-08  10.51  10.51  10.51  10.51 

我想添加一个df['Ave']列,它将某个常量或函数乘以df['Ave'].shift(1)。最优雅的方法是什么?

当我尝试这样做时,我得到一个KeyError。我还考虑设置df['Ave'].head(1) = df['Close'],然后从数据框的第二行开始执行该功能,但我不知道该怎么做。

提前致谢。

2 个答案:

答案 0 :(得分:2)

这就是你如何实现它。

import pandas as pd
df = pd.DataFrame({"col": range(1,5)})
df

输出:

    col
0   1
1   2
2   3
3   4

要更新列以使row [0]具有2 * row [1]值,我们使用以下代码。

df['col'] = 2 * df['col'].shift(-1)
df

输出:

col
0   4.0
1   6.0
2   8.0
3   NaN

你也可以df['col'] = 2 * df['col'].shift(1)用2 * row [0]值替换row [1]数据,依此类推。

答案 1 :(得分:1)

所以你的平均值就是这样:

avg = df.mean(axis=1)

如果你想要某种常数,那很简单:

df['Avg'] =  avg.shift(1) * constant

如果您需要一个功能,您可能需要执行以下操作:

df['Avg'] = avg.shift(1).apply(f)

然后你可以手动设置第一行:

df.Avg.iloc[0] = df.Close.iloc[0]