当值介于两个数字之间时,我想为dataframe行分配一个特定值,如下所示。
我得到一个错误“最大递归深度超过”。
你能帮我修一下吗?
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).你有什么办法解决这个问题吗?
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')发布于 2021-03-15 22:41:30
我只是在这里集思广益,但是Python没有全局优化器,所以它将解析dfmerged‘’right‘10次和dfmerged’‘delta’16次。我建议你做你自己的全局优化者:
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‘实体有错误的迹象,但我认为你明白了。
https://stackoverflow.com/questions/66646355
复制相似问题