熊猫:用作输入修改的整列

时间:2017-04-07 15:59:44

标签: function pandas

我有一个小函数在pandas中的一列上执行一系列nan值。这个函数有点棘手,因为我想在从nan切换到非nan单元时重置值。

Ex:[1.,1.,nan,nan,2.,nan,nan,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"]

我真的不知道为什么有人可以帮助你非常感谢!!

1 个答案:

答案 0 :(得分:3)

因为vm不是副本,

您需要更改

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

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