Python:仅当值不等于零时才对数组进行幂运算

Python:仅当值不等于零时才对数组进行幂运算,python,pandas,numpy,statsmodels,Python,Pandas,Numpy,Statsmodels,我在下面的函数中运行了几个回归。一些估计的系数输出为“0s”,当它们指数化时,自然会变成“1s” 理想情况下,在估计系数为零的情况下,我将使用sm.OLS()输出“空白”而不是“零”。但我试过了,这似乎不可能 因此,或者,我宁愿保留0而不是1。这将不需要对这一行代码中的零进行幂运算:exp\u coverties=np.exp(results.params) 我怎么能这样做 import statsmodels.api as sm df_index = [] coef_mtr = [] # s

我在下面的函数中运行了几个回归。一些估计的系数输出为“0s”,当它们指数化时,自然会变成“1s”

理想情况下,在估计系数为零的情况下,我将使用
sm.OLS()
输出“空白”而不是“零”。但我试过了,这似乎不可能

因此,或者,我宁愿保留0而不是1。这将不需要对这一行代码中的零进行幂运算:
exp\u coverties=np.exp(results.params)

我怎么能这样做

import statsmodels.api as sm

df_index = []
coef_mtr = [] # start with an empty list
for x in df_main.project_x.unique():


df_holder=df_main[df_main.project_x == x]
    X = df_holder.drop(['unneeded1', 'unneeded2','unneeded3'], axis=1)
    X['constant']=1 
    Y = df_holder['sales']

    eq=sm.OLS(y, X)
    results=eq.fit()

    exp_coefficients=np.exp(results.params)
#   print(exp_coefficients)
    coef_mtr.append(exp_coefficients)
    df_index.append(x)

coef_mtr = np.array(coef_mtr)

# create a dataframe with this data
df_columns = [f'coef_{n}' for n in range(coef_mtr.shape[1])]
df_matrix=pd.DataFrame(data = coef_mtr, index = df_index, columns = df_columns)

最干净的可能是使用
where
关键字(而不是函数),如中所示

这将跳过所有零值。但因为当我说skip时,我的意思是skip,这将使in out中的相应值未初始化。因此,我们需要将其预设为零:

out = np.zeros_like(in_)
np.exp(in_,where=in_!=0,out=out)

请修复缩进并为一个小型df示例(一个创建自身的示例,例如,
df=pd.DataFrame({'a':[1,2,3],'b':[…],…})
)提供当前和所需输出的当前输出?
numpy.where(array!=0,f(array),0)
@PaulH,在您刚才提出的内容中,我应该在哪里引入'np.exp'函数?在该示例中,
f
是任何返回与输入长度相同的数组的函数。您可以详细说明如何将其应用于我的代码吗?我似乎不明白。我尝试实现它,但得到了一个
NameError:name'in_uu'未定义
错误。@StatsScared,
in_uu
对应于您的输入,查看您的代码
结果。params
看起来是一个很好的候选者。
out = np.zeros_like(in_)
np.exp(in_,where=in_!=0,out=out)