pandas 计算车辆停止力矩的增量时间

wj8zmpe1  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(61)

我得到了一个pandas数据框架,其中包含了描述车辆速度的时间序列数据。我想求车辆速度为零时的增量时间的和。但我无法计算这些值的总和。
这是dataframe的结构:

time                        value     id      delta
211 2022-11-18 04:09:30+01:00   0.000000  215071  NaN
212 2022-11-18 04:09:35+01:00   0.000000  215071  5.0
213 2022-11-18 04:09:40+01:00   0.000000  215071  5.0
214 2022-11-18 04:09:45+01:00   0.000000  215071  5.0
215 2022-11-18 04:09:50+01:00   0.000000  215071  5.0
216 2022-11-18 04:09:55+01:00   0.000000  215071  5.0
217 2022-11-18 04:10:00+01:00   0.000000  215071  5.0
218 2022-11-18 04:10:05+01:00   0.000000  215071  5.0
219 2022-11-18 04:10:10+01:00   0.000000  215071  5.0
220 2022-11-18 04:10:15+01:00   0.000000  215071  5.0
221 2022-11-18 04:10:20+01:00   0.000000  215071  5.0
222 2022-11-18 04:10:25+01:00   0.000000  215071  5.0
223 2022-11-18 04:10:30+01:00   0.000000  215071  5.0
224 2022-11-18 04:10:35+01:00   0.000000  215071  5.0
225 2022-11-18 04:10:40+01:00   6.652344  215071  5.0
226 2022-11-18 04:10:45+01:00  10.347656  215071  5.0
227 2022-11-18 04:10:50+01:00  19.585938  215071  5.0
228 2022-11-18 04:10:55+01:00  26.968750  215071  5.0
229 2022-11-18 04:11:00+01:00  44.253906  215071  5.0
230 2022-11-18 04:11:05+01:00  55.722656  215071  5.0
231 2022-11-18 04:11:10+01:00  50.984375  215071  5.0
232 2022-11-18 04:11:15+01:00  50.121094  215071  5.0
233 2022-11-18 04:11:20+01:00  61.324219  215071  5.0
234 2022-11-18 04:11:25+01:00  65.597656  215071  5.0
235 2022-11-18 04:11:30+01:00  66.691406  215071  5.0
236 2022-11-18 04:11:35+01:00  53.773438  215071  5.0
237 2022-11-18 04:11:40+01:00  55.796875  215071  5.0
238 2022-11-18 04:11:45+01:00  63.898438  215071  5.0
239 2022-11-18 04:11:50+01:00  64.484375  215071  5.0
240 2022-11-18 04:11:55+01:00  55.804688  215071  5.0
241 2022-11-18 04:12:00+01:00  37.117188  215071  5.0
242 2022-11-18 04:12:05+01:00  37.210938  215071  5.0
243 2022-11-18 04:12:10+01:00  25.179688  215071  5.0
244 2022-11-18 04:12:15+01:00  37.738281  215071  5.0
245 2022-11-18 04:12:20+01:00  54.781250  215071  5.0
246 2022-11-18 04:12:25+01:00  58.066406  215071  5.0
247 2022-11-18 04:12:30+01:00  59.097656  215071  5.0
248 2022-11-18 04:12:35+01:00  59.839844  215071  5.0
249 2022-11-18 04:12:41+01:00  52.769531  215071  6.0
250 2022-11-18 04:12:46+01:00  42.121094  215071  5.0
251 2022-11-18 04:12:51+01:00  48.792969  215071  5.0
252 2022-11-18 04:12:56+01:00  28.902344  215071  5.0
253 2022-11-18 04:13:01+01:00  38.085938  215071  5.0
254 2022-11-18 04:13:06+01:00  48.625000  215071  5.0
255 2022-11-18 04:13:11+01:00  33.242188  215071  5.0
256 2022-11-18 04:13:16+01:00  38.894531  215071  5.0
257 2022-11-18 04:13:21+01:00  41.777344  215071  5.0
258 2022-11-18 04:13:26+01:00  30.464844  215071  5.0
259 2022-11-18 04:13:31+01:00  10.472656  215071  5.0
260 2022-11-18 04:13:36+01:00   7.535156  215071  5.0
261 2022-11-18 04:13:41+01:00   0.000000  215071  5.0
262 2022-11-18 04:13:46+01:00   0.000000  215071  5.0
263 2022-11-18 04:13:51+01:00   0.000000  215071  5.0
264 2022-11-18 04:13:56+01:00   0.000000  215071  5.0
265 2022-11-18 04:14:01+01:00   0.000000  215071  5.0
266 2022-11-18 04:14:06+01:00   0.000000  215071  5.0
267 2022-11-18 04:14:11+01:00   0.000000  215071  5.0
268 2022-11-18 04:14:16+01:00   0.000000  215071  5.0
269 2022-11-18 04:14:21+01:00   0.000000  215071  5.0
270 2022-11-18 04:14:26+01:00   0.000000  215071  5.0
271 2022-11-18 04:14:31+01:00   1.812500  215071  5.0
272 2022-11-18 04:14:36+01:00   1.636719  215071  5.0
273 2022-11-18 04:14:41+01:00   0.000000  215071  5.0
274 2022-11-18 04:14:46+01:00   0.000000  215071  5.0
275 2022-11-18 04:14:51+01:00   0.000000  215071  5.0
276 2022-11-18 04:14:56+01:00   0.000000  215071  5.0
277 2022-11-18 04:15:01+01:00   0.000000  215071  5.0
278 2022-11-18 04:15:06+01:00   0.000000  215071  5.0
279 2022-11-18 04:15:11+01:00   3.125000  215071  5.0
280 2022-11-18 04:15:16+01:00   2.554688  215071  5.0
281 2022-11-18 04:15:21+01:00   3.750000  215071  5.0
282 2022-11-18 04:15:26+01:00   1.613281  215071  5.0
283 2022-11-18 04:15:31+01:00   2.699219  215071  5.0
284 2022-11-18 04:15:36+01:00   1.222656  215071  5.0
285 2022-11-18 04:15:41+01:00   1.312500  215071  5.0
286 2022-11-18 04:15:46+01:00   2.039062  215071  5.0
287 2022-11-18 04:15:51+01:00   0.000000  215071  5.0
288 2022-11-18 04:15:56+01:00   2.183594  215071  5.0
289 2022-11-18 04:16:01+01:00   4.058594  215071  5.0
290 2022-11-18 04:16:06+01:00   2.753906  215071  5.0
291 2022-11-18 04:16:11+01:00   3.820312  215071  5.0
292 2022-11-18 04:16:16+01:00   1.792969  215071  5.0
293 2022-11-18 04:16:21+01:00   1.218750  215071  5.0
294 2022-11-18 04:16:26+01:00   0.000000  215071  5.0
295 2022-11-18 04:16:31+01:00   0.000000  215071  5.0
296 2022-11-18 04:16:36+01:00   0.000000  215071  5.0
297 2022-11-18 04:16:41+01:00   0.000000  215071  5.0
298 2022-11-18 04:16:46+01:00   0.000000  215071  5.0
299 2022-11-18 04:16:51+01:00   0.000000  215071  5.0
300 2022-11-18 04:16:56+01:00   0.000000  215071  5.0
301 2022-11-18 04:17:01+01:00   0.000000  215071  5.0
302 2022-11-18 04:17:06+01:00   0.000000  215071  5.0
303 2022-11-18 04:17:11+01:00   0.000000  215071  5.0
304 2022-11-18 04:17:16+01:00   0.000000  215071  5.0
305 2022-11-18 04:17:21+01:00   0.000000  215071  5.0
306 2022-11-18 04:17:26+01:00   0.000000  215071  5.0
307 2022-11-18 04:17:31+01:00   0.000000  215071  5.0
308 2022-11-18 04:17:36+01:00   0.000000  215071  5.0
309 2022-11-18 04:17:41+01:00   0.000000  215071  5.0
310 2022-11-18 04:17:46+01:00   0.000000  215071  5.0

字符串
我会期待这样的东西:

time                        value     id      delta   sum
211 2022-11-18 04:09:30+01:00   0.000000  215071  NaN     0
212 2022-11-18 04:09:35+01:00   0.000000  215071  5.0     5
213 2022-11-18 04:09:40+01:00   0.000000  215071  5.0     10
214 2022-11-18 04:09:45+01:00   0.000000  215071  5.0     15
215 2022-11-18 04:09:50+01:00   0.000000  215071  5.0     20
216 2022-11-18 04:09:55+01:00   0.000000  215071  5.0     25
217 2022-11-18 04:10:00+01:00   0.000000  215071  5.0     30
218 2022-11-18 04:10:05+01:00   0.000000  215071  5.0     35
219 2022-11-18 04:10:10+01:00   0.000000  215071  5.0     40
220 2022-11-18 04:10:15+01:00   0.000000  215071  5.0     45
221 2022-11-18 04:10:20+01:00   0.000000  215071  5.0     50
222 2022-11-18 04:10:25+01:00   0.000000  215071  5.0     55
223 2022-11-18 04:10:30+01:00   0.000000  215071  5.0     60
224 2022-11-18 04:10:35+01:00   0.000000  215071  5.0     65
225 2022-11-18 04:10:40+01:00   6.652344  215071  5.0     70
226 2022-11-18 04:10:45+01:00  10.347656  215071  5.0     -1
227 2022-11-18 04:10:50+01:00  19.585938  215071  5.0     -1
228 2022-11-18 04:10:55+01:00  26.968750  215071  5.0     -1
229 2022-11-18 04:11:00+01:00  44.253906  215071  5.0     -1
230 2022-11-18 04:11:05+01:00  55.722656  215071  5.0     -1
231 2022-11-18 04:11:10+01:00  50.984375  215071  5.0     -1
232 2022-11-18 04:11:15+01:00  50.121094  215071  5.0     -1


当车辆有一定的速度时,我对任何delta都不感兴趣,所以理想情况下它应该是-1或NaN。有没有人建议如何实现这个结果?

w6mmgewl

w6mmgewl1#

逻辑并不完全清楚,特别是因为您没有提供完整的输出。
如果我猜得没错的话,你需要一个cumsum,每次移动后都会重新启动。我提供了两种方法:

m = df['value'].shift().eq(0)

# continue the cumulative sum after a move
df['sum'] = df['delta'].where(m).groupby(df['id']).cumsum()

# restart the cumulative sum after a move
df['sum2'] = df['delta'].where(m).groupby([df['id'], (~m).cumsum()]).cumsum()

字符串
输出量:

time      value      id  delta    sum  sum2
211  2022-11-18 04:09:30+01:00   0.000000  215071    NaN    NaN   NaN
212  2022-11-18 04:09:35+01:00   0.000000  215071    5.0    5.0   5.0
213  2022-11-18 04:09:40+01:00   0.000000  215071    5.0   10.0  10.0
214  2022-11-18 04:09:45+01:00   0.000000  215071    5.0   15.0  15.0
215  2022-11-18 04:09:50+01:00   0.000000  215071    5.0   20.0  20.0
216  2022-11-18 04:09:55+01:00   0.000000  215071    5.0   25.0  25.0
217  2022-11-18 04:10:00+01:00   0.000000  215071    5.0   30.0  30.0
218  2022-11-18 04:10:05+01:00   0.000000  215071    5.0   35.0  35.0
219  2022-11-18 04:10:10+01:00   0.000000  215071    5.0   40.0  40.0
220  2022-11-18 04:10:15+01:00   0.000000  215071    5.0   45.0  45.0
221  2022-11-18 04:10:20+01:00   0.000000  215071    5.0   50.0  50.0
222  2022-11-18 04:10:25+01:00   0.000000  215071    5.0   55.0  55.0
223  2022-11-18 04:10:30+01:00   0.000000  215071    5.0   60.0  60.0
224  2022-11-18 04:10:35+01:00   0.000000  215071    5.0   65.0  65.0
225  2022-11-18 04:10:40+01:00   6.652344  215071    5.0   70.0  70.0
226  2022-11-18 04:10:45+01:00  10.347656  215071    5.0    NaN   NaN
227  2022-11-18 04:10:50+01:00  19.585938  215071    5.0    NaN   NaN
...
260  2022-11-18 04:13:36+01:00   7.535156  215071    5.0    NaN   NaN
261  2022-11-18 04:13:41+01:00   0.000000  215071    5.0    NaN   NaN
262  2022-11-18 04:13:46+01:00   0.000000  215071    5.0   75.0   5.0
263  2022-11-18 04:13:51+01:00   0.000000  215071    5.0   80.0  10.0
264  2022-11-18 04:13:56+01:00   0.000000  215071    5.0   85.0  15.0
265  2022-11-18 04:14:01+01:00   0.000000  215071    5.0   90.0  20.0
266  2022-11-18 04:14:06+01:00   0.000000  215071    5.0   95.0  25.0
267  2022-11-18 04:14:11+01:00   0.000000  215071    5.0  100.0  30.0
268  2022-11-18 04:14:16+01:00   0.000000  215071    5.0  105.0  35.0
269  2022-11-18 04:14:21+01:00   0.000000  215071    5.0  110.0  40.0
270  2022-11-18 04:14:26+01:00   0.000000  215071    5.0  115.0  45.0
271  2022-11-18 04:14:31+01:00   1.812500  215071    5.0  120.0  50.0
272  2022-11-18 04:14:36+01:00   1.636719  215071    5.0    NaN   NaN
273  2022-11-18 04:14:41+01:00   0.000000  215071    5.0    NaN   NaN
274  2022-11-18 04:14:46+01:00   0.000000  215071    5.0  125.0   5.0
275  2022-11-18 04:14:51+01:00   0.000000  215071    5.0  130.0  10.0
276  2022-11-18 04:14:56+01:00   0.000000  215071    5.0  135.0  15.0
277  2022-11-18 04:15:01+01:00   0.000000  215071    5.0  140.0  20.0
278  2022-11-18 04:15:06+01:00   0.000000  215071    5.0  145.0  25.0
279  2022-11-18 04:15:11+01:00   3.125000  215071    5.0  150.0  30.0
280  2022-11-18 04:15:16+01:00   2.554688  215071    5.0    NaN   NaN
281  2022-11-18 04:15:21+01:00   3.750000  215071    5.0    NaN   NaN
282  2022-11-18 04:15:26+01:00   1.613281  215071    5.0    NaN   NaN
283  2022-11-18 04:15:31+01:00   2.699219  215071    5.0    NaN   NaN
284  2022-11-18 04:15:36+01:00   1.222656  215071    5.0    NaN   NaN
285  2022-11-18 04:15:41+01:00   1.312500  215071    5.0    NaN   NaN
286  2022-11-18 04:15:46+01:00   2.039062  215071    5.0    NaN   NaN
287  2022-11-18 04:15:51+01:00   0.000000  215071    5.0    NaN   NaN
288  2022-11-18 04:15:56+01:00   2.183594  215071    5.0  155.0   5.0
289  2022-11-18 04:16:01+01:00   4.058594  215071    5.0    NaN   NaN
290  2022-11-18 04:16:06+01:00   2.753906  215071    5.0    NaN   NaN
291  2022-11-18 04:16:11+01:00   3.820312  215071    5.0    NaN   NaN
292  2022-11-18 04:16:16+01:00   1.792969  215071    5.0    NaN   NaN
293  2022-11-18 04:16:21+01:00   1.218750  215071    5.0    NaN   NaN
294  2022-11-18 04:16:26+01:00   0.000000  215071    5.0    NaN   NaN
295  2022-11-18 04:16:31+01:00   0.000000  215071    5.0  160.0   5.0
296  2022-11-18 04:16:36+01:00   0.000000  215071    5.0  165.0  10.0
297  2022-11-18 04:16:41+01:00   0.000000  215071    5.0  170.0  15.0
298  2022-11-18 04:16:46+01:00   0.000000  215071    5.0  175.0  20.0
299  2022-11-18 04:16:51+01:00   0.000000  215071    5.0  180.0  25.0
300  2022-11-18 04:16:56+01:00   0.000000  215071    5.0  185.0  30.0
301  2022-11-18 04:17:01+01:00   0.000000  215071    5.0  190.0  35.0
302  2022-11-18 04:17:06+01:00   0.000000  215071    5.0  195.0  40.0
303  2022-11-18 04:17:11+01:00   0.000000  215071    5.0  200.0  45.0
304  2022-11-18 04:17:16+01:00   0.000000  215071    5.0  205.0  50.0
305  2022-11-18 04:17:21+01:00   0.000000  215071    5.0  210.0  55.0
306  2022-11-18 04:17:26+01:00   0.000000  215071    5.0  215.0  60.0
307  2022-11-18 04:17:31+01:00   0.000000  215071    5.0  220.0  65.0
308  2022-11-18 04:17:36+01:00   0.000000  215071    5.0  225.0  70.0
309  2022-11-18 04:17:41+01:00   0.000000  215071    5.0  230.0  75.0
310  2022-11-18 04:17:46+01:00   0.000000  215071    5.0  235.0  80.0

wtlkbnrh

wtlkbnrh2#

如果希望一行显示0个值的累计和,则可以先按值排序。

df_sorted = df.sort_values(by=["value", "time" ], ascending=True)
df_sorted['cumulative_delta'] = range(0, len(df_sorted) * 5, 5)

字符串
旧答案:你可以只查询数据框中值== 0的行,然后求和。

sum = df[df["value"] == 0]["delta"].sum()

相关问题