如何使用 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()
我正在尝试转换此代码:
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()