如何计算斜率黑白2点?

时间:2019-09-20 08:36:10

标签: python python-3.x pandas

我有一个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和{{1 }}作为y列。

我知道我可以将斜率定义为:

EscRF_P2P_Volt_V

但是我无法正确实现它。

有关如何完成的任何建议?

输出:

0-5之间的第一个间隔的输出必须是这样的:

def slope(x1, y1, x2, y2):
    m = (y2-y1)/(x2-x1)
    return m

对于5-10之间的第二个间隔

slope = (12.45421-12.45421)/(5-0)

以此类推...

如果slope = (13.18681-12.45421)/(10-5) 中没有确切的值,就像没有Time_Elapsed,那么在这种情况下,我们将10的值设为EscRF_P2P_Volt_V

1 个答案:

答案 0 :(得分:1)

您可以添加具有10个组ID的另一列,然后使用'https://cors-anywhere.herokuapp.com/'并计算每个组中EscRF_P2P_Volt_V列的最后一个负号除以Time_Elapsed列的最后一个负号:

groupby

如果您具有从0 ... n-1的正常计数索引(但是您没有发布该计数),则是更通用的grpNo计算方法:

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

但是请注意,它们不会导致相同的分组,因此斜率的结果也有所不同。由您决定要使用的分组方式...

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