2017-06-06 85 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