2016-08-18 8 views
0

パンダでは、現在の行の時刻と最後の行の時刻の差である列を生成する方法を理解しようとしています。別の列が真である:だからデータフレームを与えパンダは、別の列の値に基づいて値を減算する

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 

どうもありがとうございました! df.Event_Occured.cumsum()を使用して

+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

groupbyにあなたに異なるグループを提供します。次に、メンバーごとに最初のメンバーの値を減算するグループごとに関数を適用すると、必要なものが得られます。

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

df 

enter image description here

関連する問題