python - 如何计算斜率 b/w 2 点?
问题描述
我有一个df
如下:
ContextID EscRF_P2P_Volt_V StepID Time_Elapsed
7289972 12.45421 1 0
7289972 12.45421 1 0.055
7289972 12.45421 2 0.156
7289972 12.45421 2 0.487
7289972 12.45421 2 1.477
7289972 12.45421 2 2.477
7289972 13.18681 2 3.477
7289972 12.45421 2 4.487
7289972 12.45421 2 5.993
7289972 12.45421 2 6.545
7289972 12.45421 5 7.983
7289972 12.45421 5 8.993
7289972 13.18681 5 9.993
7289972 13.18681 5 10.393
7289972 12.45421 5 11.993
7289972 12.45421 5 13.093
7289972 12.45421 5 13.384
7289972 12.45421 5 14.388
7289972 12.45421 5 15.386
7289972 12.45421 5 16.386
7289972 12.45421 5 17.396
7289972 12.45421 5 18.406
7289972 12.45421 5 19.396
7289972 11.72161 5 20.396
7289972 12.45421 5 21.396
7289972 12.45421 7 22.386
7289972 12.45421 7 23.456
7289972 13.18681 7 24.404
7289972 12.45421 12 25.443
7289972 13.18681 12 26.443
7289972 11.72161 12 27.443
7289972 12.45421 12 28.453
7289972 13.18681 12 29.443
7289972 12.45421 12 30.443
7289972 12.45421 12 31.443
7289972 12.45421 15 32.472
7289972 27.10623 15 33.444
7289972 27.10623 16 34.443
7289972 22.71062 16 35.443
7289972 22.71062 17 36.443
7289972 622.7106 19 37.503
7289972 622.7106 19 38.513
7289972 622.7106 19 39.503
7289972 622.7106 19 40.503
7289972 622.7106 19 41.503
7289972 622.7106 19 42.503
7289972 622.7106 19 43.503
7289972 622.7106 19 44.503
7289972 622.7106 19 45.532
7289972 622.7106 19 46.502
7289972 622.7106 19 47.501
7289972 622.7106 19 48.501
7289972 622.7106 19 49.501
7289972 622.7106 19 50.501
我想做的是计算范围Time_Elapsed
并将其拆分为 10 个部分,并计算每个部分的斜率,其中x
&Time_Elapsed
为y
列EscRF_P2P_Volt_V
。
我知道我可以将斜率定义为:
def slope(x1, y1, x2, y2):
m = (y2-y1)/(x2-x1)
return m
但我无法正确实施。
关于如何完成的任何建议?
输出:
0-5 之间的第一个间隔的输出必须是这样的:
slope = (12.45421-12.45421)/(5-0)
对于 5-10 之间的第二个间隔
slope = (13.18681-12.45421)/(10-5)
等等...
如果 中 没有精确值Time_Elapsed
,就像没有 一样10
,那么在这种情况下,我们EscRF_P2P_Volt_V
取值9.993
解决方案
您可以添加具有 10 个组 ID 的另一列,然后使用groupby
并计算每个组中 EscRF_P2P_Volt_V 列的最后一个减号除以 Time_Elapsed 列的最后一个减号:
df['grpNo'] = df.Time_Elapsed // 5.0502
如果您有一个从 0 ... n-1 的正常计数索引(但您没有发布),则 grpNo 计算的更通用方法:
df['grpNo'] = df.index.values // (len(df)/10)
但请注意,它们不会导致相同的分组,因此斜率的结果也会有所不同。实现您想要使用的分组取决于您...
grpd = df.groupby('grpNo')
(grpd.EscRF_P2P_Volt_V.last() - grpd.EscRF_P2P_Volt_V.first()) / (grpd.Time_Elapsed.last() - grpd.Time_Elapsed.first())
# grpNo
# 0.0 0.000000
# 1.0 0.183150
# 2.0 -0.183379
# 3.0 0.000000
# 4.0 0.365569
# 5.0 0.183150
# 6.0 3.663005
# 7.0 147.783246
# 8.0 0.000000
# 9.0 0.000000
# dtype: float64
基于索引的分组结果
# grpNo
# 0.0 0.000000
# 1.0 -0.162583
# 2.0 0.000000
# 3.0 0.000000
# 4.0 0.146286
# 5.0 0.183150
# 6.0 3.663005
# 7.0 118.577071
# 8.0 0.000000
# 9.0 0.000000
# dtype: float64
这里不同分组的组大小比较:
Index based Time based
0 6 8
1 5 5
2 6 5
3 5 5
4 6 5
5 5 5
6 5 5
7 6 5
8 5 5
9 5 6
推荐阅读
- reactjs - MaterialUI下拉图标不展开菜单
- ios - UITableView 将所做的更改应用于每个第 n 个单元格
- android - 如何以开发者身份隐藏 Google Play 商店中的应用程序
- c# - .NET Web API 中的 JSON 与 JSON 数组 - 带宽 V2
- sql - 创建新的数据库连接时,SQL Developer 错误“必需的属性‘主机名’不能为空或为空”
- c++ - (C++) 计算动态矩阵行列式的函数
- javascript - 为什么有时在这个二十一点游戏中img会跳
- python - Docker [Errno 111] 连接调用失败('127.0.0.1',6379)
- python - 如何加快损失计算,这是一一做的
- c++ - 从文本文件中查找员工并打印出他们的薪水