2017-07-01 145 views
2

採用具有refvalue爲列的數據幀:大熊貓 - 創建一個緩衝柱

ref value buffer 
0  0  0  0 
1  1  3  0 
2  2  4  0 
3  0  2  2 
4  8  21  2 
5  0  -2  -2 
6  3  13  -2 
7  6  17  -2 
8  2  4  -2 
9  0  5  5 
10 0  5  5 

你會如何創建第三buffer列,尊重這樣的定義:

  • 如果ref == 0然後緩衝=值
  • if if ref != 0 then buffer =最接近的前一行的值其中ref = 0

回答

4

使用where條件保持df.valuedf.ref == 0。其餘的將是np.nan。使用ffill填寫前一行的np.nan。使用assign來創建新列。

請注意,我沒有將列轉換爲int。由於前幾行ref可能不爲零,所以我將它留下了。如果發生這種情況,緩衝區的最初行將是np.nan,沒有任何要轉發的填充。在這種情況下,我不能投射到int。

df.assign(buffer=df.value.where(df.ref.eq(0)).ffill()) 
0

你可以在熊貓

df.ix[condition, column_to_apply] = value 
+1

'.ix'是(已廢棄)(http://pandas.pydata.org/pandas-docs/version/0.20/whatsnew.html#deprecate-ix)。 – ChuHo

+0

是的,但仍然可用 –