Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何以矢量化方式删除numpy中的na和计数值NxK数组_Python_Numpy_Nan - Fatal编程技术网

Python 如何以矢量化方式删除numpy中的na和计数值NxK数组

Python 如何以矢量化方式删除numpy中的na和计数值NxK数组,python,numpy,nan,Python,Numpy,Nan,我的情况:我有一个pandas数据帧,因此,对于每一行,我必须计算以下内容 1) 获取排除的第一个值na(df.apply(lambda x:x.dropna().iloc[0])) 2) 获取排除的最后一个值na(df.apply(lambda x:x.dropna().iloc[-1])) 3) 计算非na值(df.apply(lambda x:len(x.dropna())) 示例案例和预期输出: x = np.array([[1,2,np.nan], [4,5,6], [np.nan,

我的情况:我有一个pandas数据帧,因此,对于每一行,我必须计算以下内容

1) 获取排除的第一个值
na
df.apply(lambda x:x.dropna().iloc[0])

2) 获取排除的最后一个值
na
df.apply(lambda x:x.dropna().iloc[-1])

3) 计算非
na
值(
df.apply(lambda x:len(x.dropna())

示例案例和预期输出:

x = np.array([[1,2,np.nan], [4,5,6], [np.nan, 8,9]])
1) [1, 4, 8]
2) [2, 6, 9]
3) [2, 3, 2]
我需要对其进行优化。因此,我转向
numpy
,并寻找一种方法,将y=
x[~numpy.isnan(x)]
应用于
NxK
数组作为第一步。然后,我将使用此处显示的()用于1)和2),但对于3)我仍然空手而归-

In [756]: x
Out[756]: 
array([[  1.,   2.,  nan],
       [  4.,   5.,   6.],
       [ nan,   8.,   9.]])

In [768]: m = ~np.isnan(x)

In [769]: first_idx = m.argmax(1)

In [770]: last_idx = m.shape[1] - m[:,::-1].argmax(1) - 1

In [771]: x[np.arange(len(first_idx)), first_idx]
Out[771]: array([ 1.,  4.,  8.])

In [772]: x[np.arange(len(last_idx)), last_idx]
Out[772]: array([ 2.,  6.,  9.])

In [773]: m.sum(1)
Out[773]: array([2, 3, 2])
或者,我们可以使用
累积求和
来获得这些指数,如下所示-

In [787]: c = m.cumsum(1)

In [788]: first_idx = (c==1).argmax(1)

In [789]: last_idx = c.argmax(1)

添加一个示例案例?添加测试案例编辑到行而不是列中,因为查看我收集的示例。如果需要,请随时编辑/回滚。谢谢!谈到这些话题,你总是最棒的