当前位置: 首页 > 面试题库 >

累积重置为NaN

东方谦
2023-03-14
问题内容

如果我使用这样的1或NaNpandas.core.series.Series命名ts

3382   NaN
3381   NaN
...
3369   NaN
3368   NaN
...
15     1
10   NaN
11     1
12     1
13     1
9    NaN
8    NaN
7    NaN
6    NaN
3    NaN
4      1
5      1
2    NaN
1    NaN
0    NaN

我想计算该系列的总和,但应在NaN的位置将其重置(设置为零),如下所示:

3382   0
3381   0
...
3369   0
3368   0
...
15     1
10     0
11     1
12     2
13     3
9      0
8      0
7      0
6      0
3      0
4      1
5      2
2      0
1      0
0      0

理想情况下,我希望有一个矢量化解决方案!

我曾经在Matlab上看到过类似的问题: 在NaN上重置Matlabcumsum吗?

但我不知道如何翻译这行 d = diff([0 c(n)]);


问题答案:

Matlab代码的简单Numpy翻译是这样的:

import numpy as np

v = np.array([1., 1., 1., np.nan, 1., 1., 1., 1., np.nan, 1.])
n = np.isnan(v)
a = ~n
c = np.cumsum(a)
d = np.diff(np.concatenate(([0.], c[n])))
v[n] = -d
np.cumsum(v)

执行此代码将返回结果array([ 1., 2., 3., 0., 1., 2., 3., 4., 0., 1.])。此解决方案仅会与原始解决方案一样有效,但是如果它不足以满足您的目的,它可能会帮助您提供更好的解决方案。



 类似资料:
  • 问题内容: 我有这个数据框 我需要做的是从C列开始累积值的总和,直到下一个值为零,然后重置累积总和,直到完成所有行。 预期产量: 我已经使用了该函数并达到了期望的输出,但是问题是您无法定义固定的窗口范围,因为DataFrame可以连续五次显示数字,有时只能是两次,依此类推。 我的问题与以下Pyspark非常相似:重置条件下的累积总和,但没有人回答。 要重现数据帧: 问题答案: 创建一个临时列(),

  • 问题内容: 我想对列进行累加,但是每当遇到0时就重置聚合值 这是我尝试做的一个例子: 该数据集: 给出以下内容: 问题答案: 在SQL Server 2008中,由于无法使用分析函数,因此受到了严重限制。以下方法效率不高,但可以解决您的问题: las,在SQL Server 2012之前,最有效的解决方案可能涉及游标。在SQL Server 2012+中,您只需执行以下操作:

  • 我想知道为什么需要(又名reduce)第3个参数。对于那些不知道是什么的人,它的用法如下: 调用等同于: 还有可选第4个参数,它允许用任何其他操作替换加法。 我听说的一个基本原理是,如果你不需要加起来,而是乘一个向量的元素,我们需要其他的(非零)初始值: 但是为什么不像Python那样-为设置初始值,并使用从开始的范围。类似这样的事情: 这对任何行动都管用。为什么需要第三个参数?

  • 动态添加对象的属性 Vue中,动态新增对象的属性时,不能直接添加。正确的做法是:Vue.set(obj,key,value)。参考链接:# 判断一个checkbox是否被选中 <!-- v-model里的内容是变量,变量里的值可能是 true 后者 false --> <input type="checkbox" v-model="isSelected"> <!-- 选中时,值为 true。未选

  • 问题内容: 我已经实现了一定数量的所有素数的列表。我试图做的事情很难解释,所以我只用一些硬代码展示一下: 所以从本质上讲,我试图从上一个列表中按顺序取出一个元素,然后按指数倍增,然后将其追加到其他列表中。 我意识到我可以做到这一点,这可能会更容易: 我需要一些想法才能在某种程度上做到这一点。 问题答案: 您需要 累积产品 清单。这是一个简单的食谱: 另一种方法,使用itertools: 或者,也许

  • 假设我有几个case类和函数来测试它们: 现在我定义了一个新的case类< code>Person和一个测试函数,它很快就会失败。 现在,我希望函数累积错误,而不是快速失败。 我希望 始终执行所有这些 函数并返回 。我该怎么做?