Как рассчитать продолжительность столбца, группируя по другому столбцу (Python или R) - PullRequest
0 голосов
/ 21 января 2020

У меня есть кадр данных, df, со следующими данными:

           ID            DateTime        

           A             12/13/2019 6:35:48PM
           A             12/13/2019 6:35:49PM
           A             12/13/2019 6:35:50PM
           B             12/13/2019 7:00:00PM
           B             12/13/2019 7:00:05PM
           C             12/13/2019 8:00:05PM

Желаемый результат:

          ID              Duration

          A                  3 sec
          B                  5 sec
          C                  1 sec

Код, который я выполняю с использованием Python:

df.sum(group_by['ID'])

Как рассчитать продолжительность столбца, группируя по другому столбцу?

Любые предложения помогут.

Ответы [ 3 ]

1 голос
/ 22 января 2020

Вы можете сделать это в R с dplyr и magrittr пакетами

library(dplyr)
library(magrittr)
x <- data.frame(ID = c("A","A","A","B","B","C"),
                 DateTime =  c("12/13/2019 6:35:48PM", "12/13/2019 6:35:49PM",
                               "12/13/2019 6:35:50PM","12/13/2019 7:00:00PM", 
                               "12/13/2019 7:00:05PM","12/13/2019 8:00:05PM"))
x$DateTime <- as.POSIXct(x$DateTime, format = c("%m/%d/%Y %H:%M:%S"))
x %>% 
   group_by(ID) %>%
   mutate(dif = max(DateTime)- min(DateTime)) %>% 
   select(ID, dif) %>% distinct()
# A tibble: 3 x 2
# Groups:   ID [3]
 ID    dif   
 <fct> <drtn>
1 A     2 secs
2 B     5 secs
3 C     0 secs
1 голос
/ 21 января 2020

Отметки времени уже отсортированы? Возможно, вы захотите найти самую раннюю и последнюю отметку времени и вычесть их для каждого идентификатора.

0 голосов
/ 22 января 2020

Вы можете создать пользовательскую функцию и агрегировать по каждой серии, сгруппированной по 'ID'

import pandas as pd 
from datetime import datetime

def duration(series):
    return (max(series) - min(series)).total_seconds()

df.groupby['ID'].agg({'DateTime' : duration})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...