在我的数据框“数据”中,我有两列“趋势”& 'rtrend'
<div class="outer_container">
<div class="internal_alignment">
<div class="main_container"></div>
<div class="column_outside"></div>
</div>
</div>
的值为-1,0和1.
trend
如果def newfunc(a):
j = -1
for i in a:
j = j+1
x = (j-1)
if data.iloc[j]['trend'] != 0:
return data.iloc[j]['trend']
if data.iloc[j]['trend'] == 0:
return data.iloc[x]['rtrend']
等于-1或1,那么我想将trend
列值设置为rtrend
。
如果trend
等于0,则将trend
设置为等于数据框中上方显示的该系列中的最后一个值。
rtrend
整个系列当前返回的全部为0。
请有人指出我正确的方向吗?我敢肯定必须有更好的方法来做到这一点。 (我已经尝试data['rtrend'] = newfunc(data['trend'])
似乎没有做我想做的事。)
答案 0 :(得分:4)
不要进行程序缓慢的for
循环。做矢量化方法。只需将非零数据复制到新的rtrend
列,然后转发填充数据:
df['rtrend'] = df[df.trend!=0]['trend']
df
Out[21]:
trend b c rtrend
a -1.0 1.0 -1.0 -1.0
c 0.0 -1.0 1.0 NaN
e 1.0 -1.0 -1.0 1.0
f -1.0 1.0 -1.0 -1.0
h -1.0 1.0 1.0 -1.0
df['rtrend'].ffill()
Out[22]:
a -1.0
c -1.0
e 1.0
f -1.0
h -1.0
Name: rtrend, dtype: float64