繁体   English   中英

df.apply 在 pandas dataframe 中返回 NaN

[英]df.apply return NaN in pandas dataframe

我正在尝试根据某些因素用 1、0 或 -1 填充 dataframe 中的一列,方法如下:

def set_order_signal(row):
    
    if (row.MACD > row.SIGNAL) and (df.iloc[i-1].MACD < df.iloc[i-1].SIGNAL):
        if (row.MACD < 0 and row.SIGNAL < 0) and (row.close > row['200EMA']): 
            return 1
            
    elif (row.MACD < row.SIGNAL) and (df.iloc[i-1].MACD > df.iloc[i-1].SIGNAL):
        if (row.MACD > 0 and row.SIGNAL > 0) and (row.close < row['200EMA']):
            return -1
    else:
        return 0

有时它有效,但在其他行中它返回“NaN”。 我找不到原因或解决方案。

我使用的 dataframe 看起来像这样:

time    open    high    low close   tick_volume spread  real_volume EMA_LONG    EMA_SHORT   MACD    SIGNAL  HIST    200EMA  OrderSignal
0   2018-01-09 05:00:00 1.19726 1.19751 1.19675 1.19717 1773    1   0   1.197605    1.197152    -0.000453   -0.000453   0.000000e+00    1.197170    0.0
1   2018-01-09 06:00:00 1.19717 1.19724 1.19659 1.19681 1477    1   0   1.197538    1.197099    -0.000439   -0.000445   6.258599e-06    1.196989    0.0
2   2018-01-09 07:00:00 1.19681 1.19718 1.19642 1.19651 1622    1   0   1.197452    1.197008    -0.000444   -0.000445   5.327180e-07    1.196828    0.0
3   2018-01-09 08:00:00 1.19650 1.19650 1.19518 1.19560 3543    1   0   1.197298    1.196789    -0.000509   -0.000466   -4.237181e-05   1.196516    NaN

我正在尝试将其应用于 df:

df['OrderSignal'] = df.apply(set_order_signal, axis=1)

是格式问题吗?

已经谢谢你了!

如果要查找发送到 function 的行的索引,则需要使用 row.name,而不是 i。

试试这个,看看你会得到什么结果。 无法判断逻辑是否在所有情况下都正确,但四行每次都返回 0

def set_order_signal(row):
    if (row.MACD > row.SIGNAL) and (df.iloc[row.name-1].MACD < df.iloc[row.name-1].SIGNAL):
        if (row.MACD < 0 and row.SIGNAL < 0) and (row.close > row['200EMA']): 
            return 1
            
    elif (row.MACD < row.SIGNAL) and (df.iloc[row.name-1].MACD > df.iloc[row.name-1].SIGNAL):
        if (row.MACD > 0 and row.SIGNAL > 0) and (row.close < row['200EMA']):
            return -1
    else:
        return 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM