小编the*_*sis的帖子

如何获得至少两个连续值都大于阈值的索引?

例如,让我们考虑以下 numpy 数组:

[1, 5, 0, 5, 4, 6, 1, -1, 5, 10]
Run Code Online (Sandbox Code Playgroud)

另外,我们假设阈值等于3。也就是说,我们正在寻找至少两个连续值都高于阈值的序列。

输出将是这些值的索引,在我们的例子中是:

[[3, 4, 5], [8, 9]]
Run Code Online (Sandbox Code Playgroud)

如果输出数组被展平,那也可以!

[3, 4, 5, 8, 9]
Run Code Online (Sandbox Code Playgroud)

输出说明

在我们的初始数组中,我们可以看到 forindex = 1我们有 value 5,它大于阈值,但不是每个值都大于阈值的序列(至少两个值)的一部分。这就是为什么这个索引不会出现在我们的输出中。

另一方面,对于索引,[3, 4, 5]我们有一系列(至少两个)相邻值[5, 4, 6],其中每个值都高于阈值,这就是它们的索引包含在最终输出中的原因!


到目前为止我的代码

我已经用这样的方法来处理这个问题:

(arr > 3).nonzero()
Run Code Online (Sandbox Code Playgroud)

上述命令收集高于阈值的所有项目的索引。但是,我无法确定它们是否连续。我曾想过尝试diff对上述代码片段的结果进行尝试,然后可能会定位其中的结果(也就是说,索引是一个接一个)。这会给我们:

np.diff((arr > 3).nonzero())
Run Code Online (Sandbox Code Playgroud)

但我仍然会在这里遗漏一些东西。

python numpy

5
推荐指数
1
解决办法
730
查看次数

如何计算列表列中列值的出现次数?

考虑以下数据框:

    column_of_lists   scalar_col
0   [100, 200, 300]       100
1   [100, 200, 200]       200
2   [300, 500]            300
3   [100, 100]            200
Run Code Online (Sandbox Code Playgroud)

scalar_col所需的输出将是一个 Series,表示 的标量值在列表列中出现的次数。

所以,在我们的例子中:

1 # 100 appears once in its respective list
2 # 200 appears twice in its respective list
1 # ...
0
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

df['column_of_lists'].apply(lambda x: x.count(df['scalar_col'])
Run Code Online (Sandbox Code Playgroud)

我知道它不起作用,因为我要求它计算一个系列而不是单个值。

欢迎任何帮助!

python series pandas

2
推荐指数
1
解决办法
97
查看次数

标签 统计

python ×2

numpy ×1

pandas ×1

series ×1