Python 如何以矢量化方式删除numpy中的na和计数值NxK数组
我的情况:我有一个pandas数据帧,因此,对于每一行,我必须计算以下内容 1) 获取排除的第一个值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,
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)
添加一个示例案例?添加测试案例编辑到行而不是列中,因为查看我收集的示例。如果需要,请随时编辑/回滚。谢谢!谈到这些话题,你总是最棒的