首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >np.select -超过最大递归深度

np.select -超过最大递归深度
EN

Stack Overflow用户
提问于 2021-03-15 22:09:08
回答 1查看 82关注 0票数 0

当值介于两个数字之间时,我想为dataframe行分配一个特定值,如下所示。

我得到一个错误“最大递归深度超过”。

你能帮我修一下吗?

代码语言:javascript
复制
dfmerged['OptionType'] = np.select(
[
    np.logical_and(dfmerged['right'] == 'C', dfmerged['delta'] >= 0.75),
    np.logical_and(dfmerged['right'] == 'C', dfmerged['delta'] < 0.75 , dfmerged['delta'] > 0.55 ),
    np.logical_and(dfmerged['right'] == 'C', dfmerged['delta'] <= 0.55, dfmerged['delta'] > 0.45),
    np.logical_and(dfmerged['right'] == 'C', dfmerged['delta'] <= 0.45, dfmerged['delta'] >= 0.25),
    np.logical_and(dfmerged['right'] == 'C', dfmerged['delta'] < 0.25),
    np.logical_and(dfmerged['right'] == 'P', dfmerged['delta'] <= -0.75),
    np.logical_and(dfmerged['right'] == 'P', dfmerged['delta'] > -0.75, dfmerged['delta'] < -0.55),
    np.logical_and(dfmerged['right'] == 'P', dfmerged['delta'] >= -0.55, dfmerged['delta'] < -0.45),
    np.logical_and(dfmerged['right'] == 'P', dfmerged['delta'] >= -0.45, dfmerged['delta'] <= -0.25),
    np.logical_and(dfmerged['right'] == 'P', dfmerged['delta'] < -0.25),
],
[
    'Deep ITM',
    'ITM',
    'ATM',
    'OTM',
    'Deep OTM',
    'Deep ITM',
    'ITM',
    'ATM',
    'OTM',
    'Deep OTM'

编辑#1

我尝试了下面的错误:值的长度(1)不匹配索引的长度(8344).你有什么办法解决这个问题吗?

代码语言:javascript
复制
right_c = dfmerged['right'] == 'C'
right_p = dfmerged['right'] == 'P'
above_075 = dfmerged['delta'] >= 0.75
tween_055_075 = np.logical_and( dfmerged['delta'] < 0.75, dfmerged['delta'] > 0.55 )
tween_045_055 = np.logical_and( dfmerged['delta'] <= 0.55, dfmerged['delta'] > 0.45 )
tween_025_045 = np.logical_and( dfmerged['delta'] <= 0.45, dfmerged['delta'] >= 0.25 )
below_025 = dfmerged['delta'] < 0.25
p_below_075 = dfmerged['delta'] <= -0.75,
p_tween_075_055 = np.logical_and(dfmerged['delta'] > -0.75, dfmerged['delta'] < -0.55),
p_tween_055_045 = np.logical_and(dfmerged['delta'] >= -0.55, dfmerged['delta'] < -0.45),
p_tween_045_025 = np.logical_and(dfmerged['delta'] >= -0.45, dfmerged['delta'] <= -0.25),
p_below_075_025 = np.logical_and(dfmerged['right'] == 'P', dfmerged['delta'] < -0.25)

dfmerged['OptionType'] = np.select(
     [
        np.logical_and(right_c, above_075),
        np.logical_and(right_c, tween_055_075),
        np.logical_and(right_c, tween_045_055),
        np.logical_and(right_c, tween_025_045),
        np.logical_and(right_c, below_025),
        np.logical_and(right_p, p_below_075),
        np.logical_and(right_p, p_tween_075_055),
        np.logical_and(right_p,p_tween_055_045),
        np.logical_and(right_p,p_tween_045_025),
        np.logical_and(right_p,p_below_075_025)
    ],
      [
          'Deep ITM',
          'ITM',
          'ATM',
          'OTM',
          'Deep OTM',
          'Deep ITM',
          'ITM',
          'ATM',
          'OTM',
          'Deep OTM'
      ],
      default='Unknown')
EN

回答 1

Stack Overflow用户

发布于 2021-03-15 22:41:30

我只是在这里集思广益,但是Python没有全局优化器,所以它将解析dfmerged‘’right‘10次和dfmerged’‘delta’16次。我建议你做你自己的全局优化者:

代码语言:javascript
复制
right_c = dfmerged['right'] == 'C'
right_p = dfmerged['right'] == 'P'
above_075 = dfmerged['delta'] >= 0.75
tween_055_075 = np.and( dfmerged['delta'] < 0.75, dfmerged['delta'] > 0.55 )
tween_045_055 = np.and( dfmerged['delta'] <= 0.55, dfmerged['delta'] > 0.45 )
tween_025_045 = np.and( dfmerged['delta'] <= 0.45, dfmerged['delta'] > 0.25 )
below_025 = dfmerged['delta'] < 0.25
dfmerged['OptionType'] = np.select(
[
    np.logical_and[ right_c, above_075 ),
    np.logibal_and[ right_c, tween_055_075 ),
... etc ...
]

虽然我现在看到我对'P‘实体有错误的迹象,但我认为你明白了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66646355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档