我有一个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
和{{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
答案 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