python - 基于高于该阈值的值的平均值为变量设置阈值

标签 python pandas numpy

我觉得我的问题的答案可能很明显,但我无法弄清楚。我想知道最好的方法(或任何好的方法),在 python 中,对数值变量进行阈值处理,使得高于该阈值的值的平均值(在我的情况下,它恰好高于,但它也可以很容易地下面)等于特定的给定数字。我会对使用 numpy 或 pandas 的任何高效或高效的解决方案感到满意。
从 Pandas 系列(或一维 numpy 数组)开始,例如:

[0.1, 0.2, 0.3, 0.4, 0.5]
(实际上,系列或数组可能很长)。例如,假设给定的数字,即目标平均值,是 0.35。在这种情况下,我们可以注意到所需的阈值必须是大于或等于 0.1 但小于 0.2 的任何数字,因为 0.2、0.3、0.4 和 0.5(均高于阈值)的平均值等于 0.35。 (特别是,答案并不是唯一的。)
此外,与上面的玩具示例不同,在某些情况下,可能无法完全匹配给定的数字。但我仍然想解决一个阈值,使得高于该阈值的所有值的平均值尽可能接近给定的数字。
非常感谢有关如何在 Python 中完成此任务的任何建议。特别是,如果存在执行此操作的 numpy 或 pandas 方法,请告诉我。如果我的问题需要进一步澄清,请告诉我。谢谢!

最佳答案

您可以计算原始数组中每个元素的阈值平均值:

import numpy as np
import pandas as pd

x = np.sort(np.random.random(20))
n = np.arange(1, len(x) + 1, 1)

# cumulative sum of x in reverse order / num elements gives threshold means:
threshold_means = np.cumsum(x[::-1])/n

df = pd.DataFrame(dict(threshold=x[::-1], threshold_means=threshold_means))
df = df.sort_values("threshold").reset_index(drop=True)
输出:
    threshold  threshold_means
0    0.036453         0.474160
1    0.057774         0.497197
2    0.060959         0.521609
3    0.095344         0.548706
4    0.218508         0.577042
5    0.229380         0.600944
6    0.281243         0.627484
7    0.298807         0.654118
8    0.340491         0.683727
9    0.374211         0.714931
10   0.514332         0.749003
11   0.554557         0.775077
12   0.590041         0.802642
13   0.672917         0.833014
14   0.788553         0.859697
15   0.800751         0.873925
16   0.863758         0.892219
17   0.870211         0.901706
18   0.874873         0.917453
19   0.960032         0.960032
这是相当有效的; len(x) = 100 万只需要不到一秒的时间。如果您有数十亿,您可以进行二分搜索或其他操作,因为阈值和应该是单调的。

关于python - 基于高于该阈值的值的平均值为变量设置阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63855934/

相关文章:

python - 计算一组中的第一个连续比赛

python - 为什么 np.shape 没有显示所有尺寸?

python - 像 spyder 那样打包一个 python 应用程序

python - 比较 Python 中的两个日期对象 : TypeError: '<' not supported between instances of 'datetime.date' and 'method'

python - 将列值与另一列中的公共(public)值相加

python - 如何找到第 n 次出现的子字符串的索引并根据 Pandas 中的这些索引对字符串进行子集化

python - 如何在 pandas + matplotlib 中的多个日期的一列中绘制多个因素的值?

python - 共享数组 View 和数组数据副本的定义和区别?

Python:仅使用 1 个外生变量执行数百万个简单线性回归的最快方法

python - 如何在 python 中重定向函数的打印输出