DataFrame.apply可以引用前面的行吗?

时间:2016-08-25 21:28:54

标签: python pandas

我知道这个问题的类似版本已被提出,我已经看到了否的答案,或者看看rolling_apply,但到目前为止还没有看到我如何实现这个代码的更快版本,尽管它似乎应该是可能的。

在数据框中,我想创建一个列,其值等于另一列,或者等于其先前的值(前一行),具体取决于第二列。我可以在循环中执行此操作,但速度很慢。

import pandas as pd

df = pd.DataFrame({'a':[0,1,2,0,1,2,0,1,2],'t':[0,1,2,3,4,5,6,7,8]})

startTime = df.loc[0,'t']
df.loc[:,'startTime'] = startTime

for idx in range(df.shape[0]):
    if df.loc[idx,'a'] == 0:
        startTime = df.loc[idx,'t']
    df.loc[idx,'startTime'] = startTime

df

1 个答案:

答案 0 :(得分:3)

这会有用吗?

df['startTime'] = df.loc[df['a']==0, 't'].reindex(df.index).ffill()

df
Out: 
   a  t  startTime
0  0  0        0.0
1  1  1        0.0
2  2  2        0.0
3  0  3        3.0
4  1  4        3.0
5  2  5        3.0
6  0  6        6.0
7  1  7        6.0
8  2  8        6.0