Pandas 如何连续更新dataframe列中的每个NaN值 我有以下数据帧,a,其尺寸为1762行×9列。在ema列中,除第13个元素外,所有其他元素均为NaN。ind列包含相应行的索引 a.head(20) >>> 日期符号开盘收盘低高成交量均线指数 2010

Pandas 如何连续更新dataframe列中的每个NaN值 我有以下数据帧,a,其尺寸为1762行×9列。在ema列中,除第13个元素外,所有其他元素均为NaN。ind列包含相应行的索引 a.head(20) >>> 日期符号开盘收盘低高成交量均线指数 2010,pandas,dataframe,lambda,apply,Pandas,Dataframe,Lambda,Apply,如何连续更新dataframe列中的每个NaN值 我有以下数据帧,a,其尺寸为1762行×9列。在ema列中,除第13个元素外,所有其他元素均为NaN。ind列包含相应行的索引 a.head(20) >>> 日期符号开盘收盘低高成交量均线指数 2010-01-04 YHOO 16.940001 17.100000 16.879999 17.200001 16587400.0 NaN 0 2010-01-05 YHOO 17.219999 17.230000 17.000000 17.2300

如何连续更新dataframe列中的每个NaN值
  • 我有以下数据帧,
    a
    ,其尺寸为1762行×9列。在
    ema
    列中,除第13个元素外,所有其他元素均为
    NaN
    ind
    列包含相应行的索引
a.head(20)
>>>
日期符号开盘收盘低高成交量均线指数
2010-01-04 YHOO 16.940001 17.100000 16.879999 17.200001 16587400.0 NaN 0
2010-01-05 YHOO 17.219999 17.230000 17.000000 17.230000 1171810.00南1
2010-01-06 YHOO 17.170000 17.170000 17.070000 17.2999916422000.0南2
2010-01-07 YHOO 16.8099916.70000116.570000 16.90000031816300.0 NAN3
2010-01-08 YHOO 16.680000 16.70000116.620001 16.760000 15470000.0 NAN4
2010-01-11 YHOO 16.770000 16.740000 16.480000 16.830000 16181900.0 NaN 5
2010-01-12 YHOO 16.650000 16.680000 16.600000 16.860001 15672400.6
2010-01-13 YHOO 16.8799916.90000016.65000016.980000 16955600.0 NaN 7
2010-01-14 YHOO 16.8099917.120001 16.7999917.230000 16715600.0 NaN 8
2010-01-15 YHOO 17.250000 16.820000 16.750000 17.250000 18415000.0 NaN 9
2010-01-19 YHOO 16.7800016.75000016.6399916.9599915182600.0南10
2010-01-20 YHOO 16.650000 16.3799916.250000 16.680000 14419500.0南11
2010-01-21 YHOO 16.3899916.200001 16.100000 16.580000 21858400.0 16.884166 12
2010-01-22 YHOO 16.080000 15.880000 15.810000 16.209999 25132800.0 NaN 13
2010-01-25 YHOO 16.070000 15.860000 15.740000 16.110001 19683700.0 NaN 14
2010-01-26 YHOO 15.820000 15.990000 15.700000 16.170000 43979400.0 NaN 15
2010-01-27 YHOO 16.4599915.980000 15.770000 16.490000 41701000.0 NaN 16
2010-01-28 YHOO 15.930000 15.440000 15.440000 15.960000 30159500.0南17
2010-01-29 YHOO 15.510000 15.010000 14.900000 15.670000 39664600.0 NaN 18
2010-02-01 YHOO 15.140000 15.050000 14.870000 15.300000 29865700.0 NaN 19
  • 对于
    ema
    列中的所有元素,从第14行开始(即从第13行开始
    ind
    列中的值),我希望使用以下
    apply
    函数将它们更改为
    0.84*(前一行中的ema值)+0.16*(前一行中的“打开”值)
a['ema']=a.apply(λx:(a.loc[x['ind']-1,'open']*0.16+a.loc[x['ind']-1,'ema']*0.84)如果x['ind']>12,否则x['ema'],轴=1)
  • 仅更新第14行元素,后续行保留为
    NaN
a.head(20)
>>>
日期符号开盘收盘低高成交量均线指数
2010-01-04 YHOO 16.940001 17.100000 16.879999 17.200001 16587400.0 NaN 0
2010-01-05 YHOO 17.219999 17.230000 17.000000 17.230000 1171810.00南1
2010-01-06 YHOO 17.170000 17.170000 17.070000 17.2999916422000.0南2
2010-01-07 YHOO 16.8099916.70000116.570000 16.90000031816300.0 NAN3
2010-01-08 YHOO 16.680000 16.70000116.620001 16.760000 15470000.0 NAN4
2010-01-11 YHOO 16.770000 16.740000 16.480000 16.830000 16181900.0 NaN 5
2010-01-12 YHOO 16.650000 16.680000 16.600000 16.860001 15672400.6
2010-01-13 YHOO 16.8799916.90000016.65000016.980000 16955600.0 NaN 7
2010-01-14 YHOO 16.8099917.120001 16.7999917.230000 16715600.0 NaN 8
2010-01-15 YHOO 17.250000 16.820000 16.750000 17.250000 18415000.0 NaN 9
2010-01-19 YHOO 16.7800016.75000016.6399916.9599915182600.0南10
2010-01-20 YHOO 16.650000 16.3799916.250000 16.680000 14419500.0南11
2010-01-21 YHOO 16.3899916.200001 16.100000 16.580000 21858400.0 16.884166 12
2010-01-22 YHOO 16.080000 15.880000 15.810000 16.209999 25132800.0 16.805099 13
2010-01-25 YHOO 16.070000 15.860000 15.740000 16.110001 19683700.0 NaN 14
2010-01-26 YHOO 15.820000 15.990000 15.700000 16.170000 43979400.0 NaN 15
2010-01-27 YHOO 16.4599915.980000 15.770000 16.490000 41701000.0 NaN 16
2010-01-28 YHOO 15.930000 15.440000 15.440000 15.960000 30159500.0南17
2010-01-29 YHOO 15.510000 15.010000 14.900000 15.670000 39664600.0 NaN 18
2010-02-01 YHOO 15.140000 15.050000 14.870000 15.300000 29865700.0 NaN 19
  • 重复执行该命令,为后续行生成正确的
    ema值,一次一个
  • 有人能帮忙告诉我这里出了什么问题吗
当前脚本问题
  • 如果
    x['ind']>12,那么x['ema']
    下面的
    ind
    12不会改变
  • a.loc[x['ind']-1,'ema']
    您正在根据
    open
    ema
    的先前值计算
    ema
    • 开始时,
      ema
      中只有一个值,因此只填充下一行
    • 填充不会发生,因此在再次运行脚本之前,其余值保持未填充状态
  • 使用NaN计算值时,结果为NaN
使用
应用
  • 更新全局变量
将numpy导入为np
作为pd进口熊猫
更新的_ema=np.nan
def测试(x):
全球最新ema
如果x['ind']>12:
上一个均线=df.loc[x['ind']-1,'ema']
上一次开放=df.loc[x['ind']-1,'open']*0.16
如果不是np.isnan(上一个ema):
更新后的均线=上期开放+上期均线*0.84
其他:
更新的_ema=pre