在Pandas中,我试图弄清楚如何生成一个列,该列是当前行的时间与另一列的值为True的最后一行的时间之间的差异:
所以给出了数据帧:
df = pd.DataFrame({'Time':[5,10,15,20,25,30,35,40,45,50],
'Event_Occured': [True,False,False,True,True,False,False,True,False,False]})
print df
Event_Occured Time
0 True 5
1 False 10
2 False 15
3 True 20
4 True 25
5 False 30
6 False 35
7 True 40
8 False 45
9 False 50
我试图生成一个如下所示的列:
Event_Occured Time Time_since_last
0 True 5 0
1 False 10 5
2 False 15 10
3 True 20 0
4 True 25 0
5 False 30 5
6 False 35 10
7 True 40 0
8 False 45 5
9 False 50 10
非常感谢!
答案 0 :(得分:3)
使用df.Event_Occured.cumsum()
为您提供与groupby
不同的群组。然后应用每个组的一个函数,从每个成员中减去第一个成员的值,得到你想要的。
df['Time_since_last'] = \
df.groupby(df.Event_Occured.cumsum()).Time.apply(lambda x: x - x.iloc[0])
df
答案 1 :(得分:1)
这里有一个替代方案,用最后一次有效观察来填充与Falses相对应的值:
df['Time'] - df.loc[df['Event_Occured'], 'Time'].reindex(df.index).ffill()
Out:
0 0.0
1 5.0
2 10.0
3 0.0
4 0.0
5 5.0
6 10.0
7 0.0
8 5.0
9 10.0
Name: Time, dtype: float64