2017-04-04 24 views
2

我大約需要3天的時間通過Python學習熊貓,並且遇到了讓我難倒的第一個問題。我設法做了各種各樣的計算,我不需要迭代我正在處理的表中的每一行,但我不確定是否有辦法對以下問題執行相同操作。部分基於python/pandas自身計算列

爲了解決這個問題,我正在嘗試使用的表格可能僅歸爲2列。第一列是'日期',第二列是'訂單'。 'order'列的值大多爲0,散佈着幾個1和-1。不知道如何顯示在我的問題,但像...

  Date Order 
0 2017-03-15  0 
1 2017-03-14  1 
2 2017-03-13  0 
3 2017-03-12  0 
4 2017-03-11  -1 
5 2017-03-10  0 
6 2017-03-09  0 
7 2017-03-08  1 

我想補充另一列,被稱爲「狀態」,這是在第一次基礎上,「訂單」列,但也對「狀態'列,具體取決於'訂單'欄的值。

如果我在狀態欄的Excel中添加一個公式,它將是: = if(order = 1,1,if(order-1,-1,status [from row-1]))

所以生成的表是這樣的:

  Date Order Status 
0 2017-03-15  0  0 
1 2017-03-14  1  1 
2 2017-03-13  0  1 
3 2017-03-12  0  1 
4 2017-03-11  -1  -1 
5 2017-03-10  0  -1 
6 2017-03-09  0  -1 
7 2017-03-08  1  1 

狀態欄應該結束了,只有1或-1,初始分類後(可能與0的,直到那個時候開始,雖然)。儘管順序列通常在1和-1之間交替(除了散佈的0之外),但是也可能的是,順序列可能具有1,例如,在下一行之後,或者在幾行之後,在-1之前。這是一個輸入數據錯誤,我可以忽略,但代碼可能需要考慮這一點。

我目前使用熊貓,但如果需要也可以使用numpy。

希望這已經夠清楚了。原諒糟糕的格式。並感謝您的幫助。

組合

回答

3

maskffill,並且fillna

o = df.Order 
df.assign(Status=o.mask(o == 0).ffill().fillna(o).astype(int)) 

     Date Order Status 
0 2017-03-15  0  0 
1 2017-03-14  1  1 
2 2017-03-13  0  1 
3 2017-03-12  0  1 
4 2017-03-11  -1  -1 
5 2017-03-10  0  -1 
6 2017-03-09  0  -1 
7 2017-03-08  1  1 
+0

謝謝你的。我剛剛嘗試過,它效果很好。我只需在第二行前添加'df ='即可讓列保留在我的輸出中。現在它給了我一些功課,來弄清楚它是如何工作的以及爲什麼這樣做的! –