Python pandas循环值以两列为条件

时间:2017-01-22 01:15:47

标签: python function loops pandas

在我的数据框“数据”中,我有两列“趋势”& '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']) 似乎没有做我想做的事。)

1 个答案:

答案 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