【发布时间】:2019-11-14 11:31:55
【问题描述】:
我有以下由三列组成的数据框:values、cumsum、ema。
import pandas as pd
import numpy as np
col_values = [-36.0,
1.5,
-13.200000000000273,
32.79999999999973,
11.69999999999959,
31.59999999999991,
52.0,
-1.1999999999995907,
52.0,
-105.29999999999973,
-3.299999999999727,
-14.100000000000136,
9.599999999999454,
-90.89999999999986,
0.0,
33.40000000000009,
-12.900000000000546,
39.09999999999991,
32.80000000000018,
15.299999999999727,
-33.0,
-15.599999999999454,
11.700000000000273,
12.600000000000136,
-6.0]
col_cumsum = [1717.6999999999982,
1719.1999999999982,
1705.999999999998,
1738.7999999999977,
1750.4999999999973,
1782.0999999999972,
1834.0999999999972,
1832.8999999999976,
1884.8999999999976,
1779.5999999999979,
1776.2999999999981,
1762.199999999998,
1771.7999999999975,
1680.8999999999976,
1680.8999999999976,
1714.2999999999977,
1701.3999999999971,
1740.499999999997,
1773.2999999999972,
1788.599999999997,
1755.599999999997,
1739.9999999999975,
1751.6999999999978,
1764.299999999998,
1758.299999999998]
col_ema = [1754.3539071732214,
1751.0059160138665,
1746.71963829826,
1745.965387031759,
1746.3972549334958,
1749.7975163684007,
1757.8263243333147,
1764.9761982063321,
1776.3975126628718,
1776.702511456884,
1776.6641770324188,
1775.2866363626642,
1774.9545757566962,
1765.9969971132011,
1757.892521197658,
1753.7408525121668,
1748.75600941577,
1747.969722804744,
1750.3821301566725,
1754.0219272846084,
1754.1722199241694,
1752.8224846932958,
1752.7155813891723,
1753.8188593521081,
1754.2456346519073]
df1 = pd.DataFrame({'values': col_values, 'cumsum': col_cumsum, 'ema': col_ema})
df1.head(50)
如果在上一行中“cumsum”的值等于或大于“ema”,我想创建一个添加累积“值”列的新列。
我试过这个:
df1['equity_cond'] = np.where(df1['cumsum'].shift(1)>=df1['ema'].shift(1), df1['equity_cond'].shift(1) + df1['values'], df1['equity_cond'].shift(1))
这会产生以下错误:
KeyError: 'equity_cond'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-25-1c89c1e1113c> in <module>
----> 2 df1['equity_cond'] = np.where(df1['cumsum'].shift(1)>=df1['ema'].shift(1), df1['equity_cond'].shift(1) + df1['values'], df1['equity_cond'].shift(1))
这如何在 Pandas 中实现?
已编辑:
此新列的预期值为:
0
0
0
0
0
31.6
83.6
…
【问题讨论】:
-
如何定义df1['equity_cond']的第一个值
-
另外,最好向我们展示您的预期输出
-
@WeNYoBen 已编辑以合并预期输出。初始值为零
-
如果您的问题已经解决,请标记正确答案。