Pandas,根据另一列的值减去值

时间:2016-08-18 15:48:02

标签: python pandas

在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

非常感谢!

2 个答案:

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

enter image description here

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