我知道这个问题的类似版本已被提出,我已经看到了否的答案,或者看看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
答案 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