微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于 np.select 条件生成增量权重的函数

如何解决基于 np.select 条件生成增量权重的函数

目标:定义函数以使用标志 (1,2,3) 作为触发不同权重 (.2,.4,0) 的条件。输出一个只有权重的新 df。

np.select 正在生成错误

类型错误:condlist 中的无效条目 0:应该是布尔值 ndarray

图像将所需输出显示为“增量权重输出

import pandas as pd
import numpy as np

flags = pd.DataFrame({'Date': ['2020-01-01','2020-02-01','2020-03-01'],'flag_1': [1,3],'flag_2': [1,1,1],'flag_3': [2,2],'flag_4': [3,'flag_5' : [1,'flag_6': [2,'flag_7': [1,'flag_8': [1,'flag_9': [3,3,2]})

flags = flags.set_index('Date')

def inc_weights(dfin,wt1,wt2,wt3):
    dfin = pd.DataFrame(dfin.iloc[:,::-1])
    dfout = pd.DataFrame()
    conditions = [1,3]
    choices = [wt1,wt3]
    dfout=np.select(conditions,choices,default=np.nan)
    return(dfout.iloc[:,::-1])
inc_weights = inc_weights(flags,.2,0)
print(inc_weights)

Input and Output

解决方法

np.select 是不必要的。使用 df.replace 和映射字典的简单解决方案。

import pandas as pd
import numpy as np

flags = pd.DataFrame({'Date': ['2020-01-01','2020-02-01','2020-03-01'],'flag_1': [1,2,3],'flag_2': [1,1,1],'flag_3': [2,2],'flag_4': [3,'flag_5' : [1,'flag_6': [2,'flag_7': [1,'flag_8': [1,'flag_9': [3,3,2]})

flags = flags.set_index('Date')

print(flags)

def inc_weights(dfin,wt1,wt2,wt3):
    dfin = pd.DataFrame(dfin.iloc[:,::-1])
    dfout = pd.DataFrame()
    mapping = {1:wt1,2:wt2,3:wt3}
    dfout=dfin.replace(mapping)
    return(dfout.iloc[:,::-1])
inc_weights = inc_weights(flags,.2,.4,0)
print(inc_weights)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。