如何使用 np.append 和 np.where 方法?

how use np.append with np.where method?

我正在尝试转换此代码:

df = pd.DataFrame({'values': [np.nan,-1.2,3,6,7,2]})

def f_evol (df) : 
list1 = []  
for i in range (len(df)) : 
    if df['values'].isnull()[i] : 
        list1.append(0)
    else : 
        if df['values'][i] > 0 : 
            k = list1[i-1] + 1
            list1.append(k)
        if df['values'][i] < 0: 
            k = list1[i-1] - 1 
            list1.append(k)
return list1

df['count'] = f_evol(df)

关于这个:

def v_evol (df) :
k = [1]
a = np.where(df['values'].isnull().shift(0).values, 
             k,
             np.where(df['values'].shift(0).values > 0,
                      k.append(k[-1] + 1),
                      np.where(df['values'].shift(0).values < 0, 
                              k.append(k[-1] - 1),
                              np.nan
                              )
                     )
            )
return a

我未能像第一个代码那样附加 k 的最后一个值... 我试过用'np.concatenate()'替换'k[0] + 1',用'np.append()'替换'np.append()'但没有成功...... b

使用 numpy

这将在没有任何显式迭代的情况下提供您想要的(通常,您希望在使用数组和数据帧时避免 for 循环):

np.sign(df["values"].fillna(0)).cumsum()

演示:

In [3]: df["count"] = np.sign(df["values"].fillna(0)).cumsum()

In [4]: df
Out[4]:
   values  count
0     NaN    0.0
1    -1.2   -1.0
2     3.0    0.0
3     6.0    1.0
4     7.0    2.0
5     2.0    3.0

如果需要,您当然可以将 "count" 列转换为整数 dtype

没有 numpy

这将在没有 numpy 依赖项的情况下产生相同的结果,如果重要的话:

(df["values"] // df["values"].abs()).fillna(0).cumsum()