2016-08-18 3 views
0

In Pandas, ich versuche, herauszufinden, wie man eine Spalte generiert, die die Differenz zwischen der Zeit der aktuellen Zeile und der Zeit der letzten Zeile ist, in der der Wert von So gegebenPandas, subtrahieren Werte basierend auf dem Wert einer anderen Spalte

die Datenrahmen: eine andere Spalte 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 

ich versuche, eine Spalte zu erzeugen, die wie folgt aussehen:

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 

Vielen Dank!

+0

Bitte zeigen Sie uns die Schritte, die Sie versucht haben, so weit und wo genau Sie scheitern um die Ausgabe zu erreichen. –

Antwort

1

Hier ist eine Alternative, die die Werte entsprechend Falschen mit der zuletzt gültigen Beobachtung füllt:

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

Danke! hat perfekt funktioniert! – Snapula

3

df.Event_Occured.cumsum() Verwendung gibt Ihnen verschiedene Gruppen groupby. Wenn Sie dann eine Funktion pro Gruppe anwenden, die den Wert des ersten Mitglieds von jedem Mitglied subtrahiert, erhalten Sie, was Sie wollen.

df['Time_since_last'] = \ 
    df.groupby(df.Event_Occured.cumsum()).Time.apply(lambda x: x - x.iloc[0]) 

df 

enter image description here

Verwandte Themen