- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Givens: 我有一组一天的时间序列数据,比如 96 个值。我有一个累积值,比如在给定时间段内有 101 个单位。
问题:我需要找到阈值 X,其中所有高于该阈值的值总和为给定的累积值 101。请参见下图的视觉效果:
约束:我必须多次执行此计算(一年中的每一天),因此最好避免迭代,但不是必需的。
示例数据:
DateTime Usage_KWH
1/1/2015 0:15 10.32
1/1/2015 0:30 10.56
1/1/2015 0:45 9.84
1/1/2015 1:00 9.36
1/1/2015 1:15 10.32
1/1/2015 1:30 9.6
1/1/2015 1:45 9.6
1/1/2015 2:00 10.32
1/1/2015 2:15 9.84
1/1/2015 2:30 9.6
1/1/2015 2:45 10.08
1/1/2015 3:00 9.36
1/1/2015 3:15 9.84
1/1/2015 3:30 10.32
1/1/2015 3:45 9.84
1/1/2015 4:00 9.84
1/1/2015 4:15 10.08
1/1/2015 4:30 9.6
1/1/2015 4:45 9.6
1/1/2015 5:00 10.8
1/1/2015 5:15 9.6
1/1/2015 5:30 9.84
1/1/2015 5:45 14.76
1/1/2015 6:00 14.4
1/1/2015 6:15 14.76
1/1/2015 6:30 15.12
1/1/2015 6:45 14.4
1/1/2015 7:00 14.4
1/1/2015 7:15 14.04
1/1/2015 7:30 12.96
1/1/2015 7:45 14.04
1/1/2015 8:00 12.6
1/1/2015 8:15 12.96
1/1/2015 8:30 14.04
1/1/2015 8:45 12.96
1/1/2015 9:00 17.28
1/1/2015 9:15 17.28
1/1/2015 9:30 17.76
1/1/2015 9:45 17.28
1/1/2015 10:00 17.76
1/1/2015 10:15 16.8
1/1/2015 10:30 17.28
1/1/2015 10:45 19.68
1/1/2015 11:00 17.28
1/1/2015 11:15 16.8
1/1/2015 11:30 16.8
1/1/2015 11:45 17.28
1/1/2015 12:00 16.8
1/1/2015 12:15 17.28
1/1/2015 12:30 17.28
1/1/2015 12:45 16.8
1/1/2015 13:00 17.28
1/1/2015 13:15 16.8
1/1/2015 13:30 16.8
1/1/2015 13:45 17.28
1/1/2015 14:00 25.92
1/1/2015 14:15 25.2
1/1/2015 14:30 25.2
1/1/2015 14:45 25.2
1/1/2015 15:00 25.2
1/1/2015 15:15 25.92
1/1/2015 15:30 25.2
1/1/2015 15:45 25.92
1/1/2015 16:00 25.92
1/1/2015 16:15 23.76
1/1/2015 16:30 23.76
1/1/2015 16:45 23.76
1/1/2015 17:00 24.48
1/1/2015 17:15 25.92
1/1/2015 17:30 8.88
1/1/2015 17:45 9.12
1/1/2015 18:00 8.88
1/1/2015 18:15 9.6
1/1/2015 18:30 8.88
1/1/2015 18:45 9.12
1/1/2015 19:00 9.12
1/1/2015 19:15 9.6
1/1/2015 19:30 9.12
1/1/2015 19:45 8.88
1/1/2015 20:00 9.12
1/1/2015 20:15 9.36
1/1/2015 20:30 9.12
1/1/2015 20:45 8.88
1/1/2015 21:00 6
1/1/2015 21:15 6
1/1/2015 21:30 6
1/1/2015 21:45 4
1/1/2015 22:00 5
1/1/2015 22:15 6
1/1/2015 22:30 7
1/1/2015 22:45 5
1/1/2015 23:00 7
1/1/2015 23:15 4
1/1/2015 23:30 6
1/1/2015 23:45 5
我糟糕的迭代代码:
time_series_df = pd.DataFrame(time_series_list)
#Iterative approach taking 10 steps
for x in (time_series_df.max, time_series_df.min, -(time_series_df.max)/10):
#Getting values above an arbitrary threshold
temp = time_series_df.query('Usage_KWH > @x')
#If the difference above threshold and aggregate sum for the day are less than given cumulative value then try again
if time_series_df.sum - temp < 101:
final_threshold = temp
#print the highest value that did not exceed 101
print('final answer', final_threshold)
额外:我尝试使用 clip_upper、rank、cumsum、quantile 和 nlargest 的变体。我正在使用 Pandas 0.18
最佳答案
此处的技巧是对数据进行排序。这是一种方法。可能会提高速度!
df2 = df.sort_values(['Usage_KWH'], ascending=[False]).reset_index()
df2['KWHcum'] = df2['Usage_KWH'].cumsum()/ (df2.index+1)
df2["dif"] = np.round( df2['KWHcum'] - df2['Usage_KWH'], 3)*(df2.index+1)
df2
# index DateTime Usage_KWH KWHcum dif
# 0 1/1/2015 14:00 25.92 25.920000 0.0000
# 1 1/1/2015 16:00 25.92 25.920000 0.0000
# 2 1/1/2015 15:45 25.92 25.920000 0.0000
# 3 1/1/2015 15:15 25.92 25.920000 0.0000
# 4 1/1/2015 17:15 25.92 25.920000 0.0000
# 5 1/1/2015 14:45 25.20 25.800000 3.6000
# 6 1/1/2015 14:15 25.20 25.714286 3.6001
# 7 1/1/2015 15:30 25.20 25.650000 3.6000
# 8 1/1/2015 14:30 25.20 25.600000 3.6000
# 9 1/1/2015 15:00 25.20 25.560000 3.6000
# 10 1/1/2015 17:00 24.48 25.461818 10.7998
# 11 1/1/2015 16:30 23.76 25.320000 18.7200
# 12 1/1/2015 16:45 23.76 25.200000 18.7200
# 13 1/1/2015 16:15 23.76 25.097143 18.7194
# 14 1/1/2015 10:45 19.68 24.736000 75.8400
# 15 1/1/2015 9:30 17.76 24.300000 104.6400
# 16 1/1/2015 10:00 17.76 23.915294 104.6401
# 17 1/1/2015 11:00 17.28 23.546667 112.8006
# 18 1/1/2015 9:45 17.28 23.216842 112.7992
# 19 1/1/2015 12:30 17.28 22.920000 112.8000
# 20 1/1/2015 10:30 17.28 22.651429 112.7994
# 21 1/1/2015 12:15 17.28 22.407273 112.8006
# 22 1/1/2015 13:00 17.28 22.184348 112.7989
# 23 1/1/2015 11:45 17.28 21.980000 112.8000
# 24 1/1/2015 13:45 17.28 21.792000 112.8000
# 25 1/1/2015 9:00 17.28 21.618462 112.8010
# 26 1/1/2015 9:15 17.28 21.457778 112.8006
# 27 1/1/2015 11:15 16.80 21.291429 125.7592
# 28 1/1/2015 11:30 16.80 21.136552 125.7614
# 29 1/1/2015 10:15 16.80 20.992000 125.7600
df2 = df2[df2['dif'] < 101]
print df2['Usage_KWH'].tail(1)
# 14 19.68
# Name: Usage_KWH, dtype: float64
df2 = df2[df2['dif'] < 141]
print df2['Usage_KWH'].tail(1)
#33 16.8
#Name: Usage_KWH, dtype: float64
关于algorithm - Pandas:求解时间序列数据集的最高值阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38134690/
我正在使用混合效应模型,并且由于我的方法的特殊性我需要解决下面模型的积分,然后制作图表获得的估计值。 换句话说,我需要求解下面的积分: 其中,di^2 是我模型中的 Var3,dh 是混合效应模型对应
我有一个方程组,我想用数值方法求解它。给定起始种子,我想得到一个接近的解决方案。让我解释。 我有一个常量向量,X,值: X <- (c(1,-2,3,4)) 和一个向量 W 的权重: W <- (c(
假设我有以下方程组: a * b = 5 sqrt(a * b^2) = 10 如何求解 R 中 a 和 b 的这些方程? 我想这个问题可以说是一个优化问题,具有以下功能......? fn <- f
我在 R 中有一个简单的通量模型。它归结为两个微分方程,对模型中的两个状态变量进行建模,我们将它们称为 A和 B .它们被计算为四个分量通量的简单差分方程 flux1-flux4 , 5 个参数 p1
R有什么办法吗?求解给定单变量函数的反函数?动机是我以后告诉R使用值向量作为反函数的输入,以便它可以吐出反函数值。 例如,我有函数 y(x) = x^2 ,逆是 y = sqrt(x) .有没有办法R
我在字符串中有以下方程 y = 18774x + 82795 求解x我会这样做:- x = (y-82795) / 18774 我知道y的值 但是方程一直在变化,并且始终采用字符串格式 是否可以简单地
如果我用 diophantine(2*x+3*y-5*z-77) 我收到了这个结果。 {(t_0, -9*t_0 - 5*t_1 + 154, -5*t_0 - 3*t_1 + 77)} 到目前为止还
我正在尝试求解仅限于正解的 ODE,即: dx/dt=f(x) x>=0。 在 MATLAB 中这很容易实现。 R 是否有任何变通方法或包来将解决方案空间限制为仅正值? 这对我来说非常重要,不幸的是没
下面的 ANTLR 文法中的 'expr' 规则显然是相互左递归的。作为一个 ANTLR 新手,我很难解决这个问题。我已经阅读了 ANTLR 引用书中的“解决非 LL(*) 冲突”,但我仍然没有看到解
我有一个关于在 R 中求解函数的可能性的非常基本的问题,但知道答案确实有助于更好地理解 R。 我有以下等式: 0=-100/(1+r)+(100-50)/(1+r)^2+(100-50)/(1+r)^
我正在编写使用递归回溯来解决 8 个皇后问题的代码(将 n 个国际象棋皇后放在 n × n 的棋盘上,这样皇后就不会互相攻击)。 我的任务是创建两个方法:编写一个公共(public)solveQuee
我不知道在以下情况下如何进行,因为最后一个方程没有所有 4 个变量。所以使用了等式下面的代码,但这是错误的......有谁知道如何进行? 方程: 3a + 4b - 5c + d = 10 2a +
假设我们有这个递归关系,它出现在 AVL 树的分析中: F1 = 1 F2 = 2 Fn = Fn - 1 + Fn - 2 + 1(其中 n ≥ 3) 你将如何解决这个递归以获得 F(n) 的封闭形
在Maple中,有谁知道是否存在一个函数来求解变量?例如,我正在尝试求解 r 的 solve4r=(M-x^y)*(r^(-1)) mod (p-1)。所以我知道 M、x、y 和 p 的值,但不知道
我也问过这个here在声音设计论坛上,但问题是沉重的计算机科学/数学,所以它实际上可能属于这个论坛: 因此,通过读取文件中的二进制文件,我能够成功地找到关于 WAV 文件的所有信息,除了 big si
我有以下问题: 设 a 和 b 为 boolean 变量。是否可以设置 a 和 b 的值以使以下表达式的计算结果为 false? b or (((not a) or (not a)) or (a or
我需要用 C 求解这个超越方程: x = 2.0 - 0.5sen(x) 我试过这个: double x, newx, delta; x = 2.0 - 0.5; newx = sin(x); del
我在 Windows 上使用 OpenCV 3.1。 一段代码: RNG rng; // random number generator cv::Mat rVec = (cv::Mat_(3, 1)
我正在尝试求解一个包含 3 个变量和数量可变的方程的方程组。 基本上,系统的长度在 5 到 12 个方程之间,无论有多少个方程,我都试图求解 3 个变量。 看起来像这样: (x-A)**2 + (y-
我正在尝试为有限差分法设计一种算法,但我有点困惑。所讨论的 ODE 是 y''-5y'+10y = 10x,其中 y(0)=0 且 y(1)=100。所以我需要一种方法来以某种方式获得将从关系中乘以“
我是一名优秀的程序员,十分优秀!