2017-04-07 36 views
0

我具有执行楠的cumsum一点功能上在一个大熊猫列的值。该函数有点棘手,因为我想在从nan单元切换到非nan单元时重置值。熊猫:用作输入整列改性

例:[1,1,南,南,2.,南,楠,3]给出[0。,0,1,2,0,1,2, 0]

反正功能是工作,那就是:

def count_nan_reset(v): 
vm = v.copy() 
vm = v.as_matrix() 
vm[~np.isnan(vm)] = 2 # arbitraire 
vm[np.isnan(vm)] = 1 
vm[vm==2] = np.nan 
n = np.isnan(vm) 
a = ~n 
c = np.cumsum(a) 
d = np.diff(np.concatenate(([0.], c[n]))) 
vm[n] = -d 
fin = np.cumsum(vm) 
return fin 

我是,当我尝试这个功能适用于一列作为输入,它改变了列本身的问题(如一个inplace = True选项可以)!!

例如:

d = {'Values_for_trial' : pd.Series([1., 1., np.nan, np.nan, 2., np.nan, np.nan, 3.])} 
df = pd.DataFrame(d) 
df["results"] = count_nan_reset(df["Values_for_trial"]) 

那么这里面的变化DF [“Values_for_trial”]

值我真的不知道是什么原因,如果有人能帮助我非常感谢你!

回答

3

因为虚拟机不是副本,

您需要更改

def count_nan_reset(v): 
    vm = v.copy() 
    vm = v.as_matrix() 

def count_nan_reset(v): 
    vm = v.copy().as_matrix() 
    ... 
+0

哇,这件事把我疯了太感谢你了它的工程! :) – clowny