3
我試圖讓一個計數器增加,因爲我使用np.where基於一些時間差異的日子處理一個熊貓系列。舉例來說,如果我有一個具有以下值的一系列:增加一個計數器的基礎上與一些價值np.where
Date Value
01/03/2017 5
02/03/2017 8
03/03/2017 3
04/03/2017 7
12/03/2017 1
13/03/2017 3
14/03/2017 4
我會去一個系列,看起來像這樣通過這個代碼
df['DIFF'] = df['Date'].diff()/np.timedelta64(1, 'D')
爲了產生這種數據幀。
Date Value DIFF
01/03/2017 5 0
02/03/2017 8 1
03/03/2017 3 1
04/03/2017 7 1
12/03/2017 1 8
13/03/2017 3 1
14/03/2017 4 1
然後我想創建一個一生計數的生命數,在假設時間比diff的4說是一個千載難逢的新實例更大。
Date Value DIFF LIFETIME
01/03/2017 5 0 1
02/03/2017 8 1 1
03/03/2017 3 1 1
04/03/2017 7 1 1
12/03/2017 1 8 2
13/03/2017 3 1 2
14/03/2017 4 1 2
我覺得我幾乎沒有與此代碼
df['LIFE'] = np.where(df['DIFF'] >=4, life_counter=df.shift(-1)+1, df.shift(-1))
這裏的邏輯是,如果DIFF大於或等於4,我將在LIFE變量設置爲先前的+ 1.否則,它將與先前的值相同。這似乎是一種很好的方式來承載國家。但是,我的循環似乎忽略了我設置的狀態,可能是由於np.where的工作原理。有人知道一種方法來做我正在做的事情,並讓它工作。目前,我的輸出看起來像這樣。
Date Value DIFF LIFETIME
01/03/2017 5 0 1
02/03/2017 8 1 1
03/03/2017 3 1 1
04/03/2017 7 1 1
12/03/2017 1 8 2
13/03/2017 3 1 1
14/03/2017 4 1 1
嗯,很不錯! :D這是一個更好的解決方案,因爲它看起來有問題,使用狀態時的狀態np.where – Eamonn
@Eamonn我不確定你的意思是「狀態問題」,但我認爲你的意思是,'life_counter = df .shift(-1)+1,df.shift(-1)'在函數被調用之前被評估。 –
是的,確切地說。所以,即使生命前值的「狀態」變爲2,下一行評估也沒有看到。 – Eamonn