2017-06-07 40 views
2

我有一個3列的熊貓數據框。更新熊貓數據幀列與匹配行的序列

Event_occur Boolean 
Event_predict Boolean 
Incorrect_pred Number default 0 

請參考截圖。我正在嘗試根據特定條件更新Incorrect_pred。

  1. 每當Event_occur是True和Event_predict爲False, Incorrect_pred應與越來越多的順序進行更新。 例如,第一次出現Event_occur = True和Event_predict = False,應該更新爲1的Incorrect_pred,第二次出現的次數爲2等等。
  2. 只要2個事件都爲True,則 Incorrect_pred應該更新爲前一個非零 的數字(請參閱示例中的索引第5行和第9行)。
  3. 每當 Event_occur爲False時,更新始終爲0,這是默認的 值。

如果這是SQL,我可以使用Windows功能。例如:

(case 
    when Event_occur = 'FALSE' then 0 
    else sum(case when Event_occur = Event_predict) then 0 else 1 end) 
over (order by <some column>) end) 

有沒有一種方法可以在熊貓中做到這一點?

expected dataframe

enter image description here

回答

0

讓我們嘗試:

df['pred'] = np.where(df.Event_occur == False,0,np.where(df.Event_occur != df.Event_predict,1,0)).cumsum() 
df['Incorrect_pred']= df.pred.where(df.Event_occur == True).fillna(0) 
print(df) 

輸出:

Event_occur Event_predict Incorrect_pred pred 
0  False   True    0.0  0 
1   True   False    1.0  1 
2   True   False    2.0  2 
3  False   False    0.0  2 
4   True   False    3.0  3 
5   True   True    3.0  3 
6   True   True    3.0  3 
7   True   False    4.0  4 
8  False   True    0.0  4 
9   True   True    4.0  4 
+0

輝煌!感謝斯科特! –