考虑以下数组:
arr = np.array(
[
[10, np.nan],
[20, np.nan],
[np.nan, 50],
[15, 20],
[np.nan, 30],
[np.nan, np.nan],
[10, np.nan],
]
)
对于arr
中每列的每个单元格,我需要找到到下一个非NaN值的距离。也就是说,预期的结果应该是这样的:
expected = np.array(
[
[1, 2],
[2, 1],
[1, 1],
[3, 1],
[2, np.nan],
[1, np.nan],
[np.nan, np.nan]
]
)
2条答案
按热度按时间2w2cym1i1#
使用pandas,你可以用
mask
和shift
计算一个反向的cumcount
:输出量:
hc2pp10m2#
你可能会得到一些perf加速,通过二进制搜索和一些numpy函数的组合: