我的数据框如下:
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']
,然后从数据框的第二行开始执行该功能,但我不知道该怎么做。
提前致谢。
答案 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]