2017-06-06 129 views
0

目標是使用列B中的值設置一個整數閾值,並在列C中記錄這些閾值。列B中的閾值爲-1和1,結束於0交叉,以便在列C中記錄-1和1的值。所得到的數據幀將是:在另一列的閾值整數列中設置整數值?

A  B  C  
1 D 0.25  0  
2 D 0.50  0  
3 D 0.75  0  
4 D 1.00  1  
5 D 1.25  1  
6 D 1.75  1  
7 D 0.50  1  
8 D -0.25  0  
9 D 1.25  1  
10 D 0.75  1  
11 D -0.75  0  
12 D -1.00 -1  
13 D -1.50 -1  
14 D -2.00 -1  
14 D -0.75 -1  
14 D 0.00  0 

到目前爲止,我已經嘗試實現與.bins()爲數據幀,但它並沒有真正通過迭代或理解的系列,而只是設定值箱。此代碼是:

df['C'] = 0 

bins = [-1,0, 1] #with values from df['B'] 

group_names = [-1,0, 1] #with values from df['B'] 

g = pd.cut(group_em['B'], bins, labels = group_names) 
g= g.fillna(0) 

回答

1

你可以嘗試這樣的事情,使用numpy.where

import numpy as np 
df['C'] = np.where(df.B >= 1, 1,    # if B >= 1 then C is 1 
      np.where(df.B <= -1, -1,   # if B <= -1 then C is -1 
      np.where(np.sign(df.B).diff() != 0, 0, np.nan))) # else if B changes sign 
      # (cross zero) then C is 0 otherwise C is nan 

df.ffill()         # fill nan with previous values 

# A  B  C 
#1 D 0.25 0.0 
#2 D 0.50 0.0 
#3 D 0.75 0.0 
#4 D 1.00 1.0 
#5 D 1.25 1.0 
#6 D 1.75 1.0 
#7 D 0.50 1.0 
#8 D -0.25 0.0 
#9 D 1.25 1.0 
#10 D 0.75 1.0 
#11 D -0.75 0.0 
#12 D -1.00 -1.0 
#13 D -1.50 -1.0 
#14 D -2.00 -1.0 
#14 D -0.75 -1.0 
#14 D 0.00 0.0 
+0

大,該解決方案是正確的,因爲實現的。快速註釋,至少對於我的代碼:我必須分配df ['C'] = df ['C'] .ffill()。除了這個問題,我將接下來實現的是一個線性整數分配,而不是-1和1.這將保持閾值,但改變C列值以基於關閉柱面D線性縮放,而df ['C'] = -1或1.謝謝你,我欣賞它! –

+1

不客氣。很高興它有幫助。是的,您需要將專欄分配回去。 'ffill'不會修改列。 – Psidom