如何计算坡度b/w 2点?

2024-04-25 22:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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部分,然后计算每个部分的斜率,xTime_Elapsed&;yEscRF_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


Tags: df间隔timep2pslopex1x2elapsed
1条回答
网友
1楼 · 发布于 2024-04-25 22:26:26

您可以添加另一个具有10个组ID的列,然后使用groupby计算每个组中EscRF\u P2P\u Volt\u V列的最后一个减号除以Time\u Elapsed列的最后一个减号:

df['grpNo'] = df.Time_Elapsed // 5.0502

一个更一般的方法为grpNo计算,如果你有一个正常的计数指数从0。。。n-1(但您没有发布):

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

相关问题 更多 >

    热门问题