我有这个代码(不太好),通过迭代计算基于先前行值的一列:
date_prev_list= np.zeros(len(df))
for ii, row in df.iterrows():
col_nb= row['colum_nb']
if col_nb == col_nb_prev : #Condition
#Store previous row value in current row
date_prev_list[ii]= date_prev
#Store previous values
date_prev= row['datesec2']
col_nb_prev= col_nb
else :
#Store previous value
date_prev= row['datesec2']
col_nb_prev= col_nb
df['datesec_prev']= pd.Series( date_prev_list)
只是想知道我们是否可以使用泛型方法直接使用Pandas中的df.apply()。
答案 0 :(得分:0)
我没有找到使用df.apply
的解决方案,但这可能对您有帮助。
制作样本数据
In [2]: df = pd.DataFrame({'a': [1,1,2,2,3], 'b': [11,12,13,14,15]})
In [3]: df
Out[3]:
a b
0 1 11
1 1 12
2 2 13
3 2 14
4 3 15
解决方案:
In [6]: t = df.a.shift() == df.a
In [10]: df.b.shift().where(t, 0)
Out[10]:
0 0.0
1 11.0
2 0.0
3 13.0
4 0.0
Name: b, dtype: float64