2016-08-18 8 views
0

В Pandas я пытаюсь выяснить, как создать столбец, который является разницей между временем текущей строки и временем последней строки, в котором значение другой столбец True:Pandas, вычесть значения на основе значения другого столбца

Так, учитывая dataframe:

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

Пожалуйста, покажите нам шаги вы пробовали до сих пор, и где именно вы неудачу для достижения результата. –

ответ

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 
+0

Спасибо! отлично работал! – Snapula

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

Смежные вопросы