从应用Python中的公式的数据框对象创建新列

时间:2017-05-22 15:26:57

标签: python pandas

我在python中有一个dataframe对象,如下所示:

              open    high     low    last gMonth
date                                             
2017-01-02  0.7220  0.7221  0.7166  0.7184  Peter
2017-01-03  0.7184  0.7241  0.7183  0.7219   Jack
2017-01-04  0.7219  0.7287  0.7215  0.7283  Peter
2017-01-05  0.7283  0.7357  0.7273  0.7338  Peter
2017-01-06  0.7338  0.7355  0.7289  0.7301   Jack
2017-01-09  0.7293  0.7374  0.7289  0.7586   Jack

我想要实现的是在gMonth旁边添加一个新列&#39; result&#39;,以便根据现有列的过去几行计算此新列的值。例如,&#39;结果&#39;每行的行数等于过去3行(当前行包括)的平均打开的平方根。换句话说,2017-01-09的结果值应为[(0.7283 + 0.7338 + 0.7293)/ 3] ^ 0.5,2017-01-06的结果将使用向后应用的相同公式计算。< / p>

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用Series.rolling

disclaimer = (TextView) view.findViewById(R.id.disclaimer);    
disclaimer.setMovementMethod(LinkMovementMethod.getInstance());

正如您所看到的,默认情况下,当您没有3个值时,这将在开始时提供NaN;如果您想获得一个值,即使您只有1个数据点可以平均值,也可以设置In [16]: df["result"] = df["open"].rolling(window=3).mean()**0.5 In [17]: df Out[17]: open high low last gMonth result date 2017-01-02 0.7220 0.7221 0.7166 0.7184 Peter NaN 2017-01-03 0.7184 0.7241 0.7183 0.7219 Jack NaN 2017-01-04 0.7219 0.7287 0.7215 0.7283 Peter 0.848980 2017-01-05 0.7283 0.7357 0.7273 0.7338 Peter 0.850216 2017-01-06 0.7338 0.7355 0.7289 0.7301 Jack 0.853229 2017-01-09 0.7293 0.7374 0.7289 0.7586 Jack 0.854673

答案 1 :(得分:0)

import pandas
df['Result']=pd.rolling_mean(df["open"],window=3)**0.5

如果您需要有关滚动功能的更多信息。 http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.rolling_mean.html