Как я могу считать повторения cpf в определенный день? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть следующий фрейм данных:

cpf  day  startdate              enddate
1234  1   08/01/2018 12:50:0     08/01/2018 15:50:0
1234  1   08/01/2018 14:30:0     08/01/2018 15:50:0
1234  1   08/01/2018 14:50:0     08/01/2018 15:50:0
1234  2   08/02/2018 20:20:0     08/02/2018 23:50:0
1234  2   08/02/2018 22:50:0     08/02/2018 23:50:0
1235  1   08/01/2018 11:50:0     08/01/2018 15:20:0
5212  1   08/01/2018 14:50:0     08/01/2018 15:20:0

Мне нужно рассчитать время разговора столбца cpf за один день.Например, первый cpf - 1234, поэтому в 1-й день этот cpf инициирует диалог 01.08.2008 г. 12: 50: 0, а конец беседы был 01.08.2008 15: 50: 0, что мне нужноименно это вычитание о enddate - startdate.Как я могу это сделать?

  cpf  day  startdate              enddate              Time_Conversation
    1234  1   08/01/2018 12:50:0     08/01/2018 15:50:0         3:00:0
    1234  1   08/01/2018 14:30:0     08/01/2018 15:50:0         3:00:0
    1234  1   08/01/2018 14:50:0     08/01/2018 15:50:0         3:00:0
    1234  2   08/02/2018 20:20:0     08/02/2018 23:50:0         3:30:0
    1234  2   08/02/2018 22:50:0     08/02/2018 23:50:0         3:30:0
    1235  1   08/01/2018 11:50:0     08/01/2018 15:20:0         4:30:0
    5212  1   08/01/2018 14:50:0     08/01/2018 15:20:0         4:30:0

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Сначала Преобразуйте строки даты в pandas.Timestamps:

>>> df['startdate'] = pd.to_datetime(df['startdate'])
>>> df['enddate'] = pd.to_datetime(df['enddate'])

>>> df["Time_Conversation"] = df['enddate']-df['startdate']
>>> df
    cpf  day           startdate             enddate Time_Conversation
0  1234    1 2018-08-01 12:50:00 2018-08-01 15:50:00   0 days 03:00:00
1  1234    1 2018-08-01 14:30:00 2018-08-01 15:50:00   0 days 01:20:00
2  1234    1 2018-08-01 14:50:00 2018-08-01 15:50:00   0 days 01:00:00
3  1234    2 2018-08-01 20:20:00 2018-08-02 23:50:00   1 days 03:30:00
4  1234    2 2018-08-01 22:50:00 2018-08-02 23:50:00   1 days 01:00:00
5  1235    1 2018-08-01 11:50:00 2018-08-01 15:20:00   0 days 03:30:00
6  5212    1 2018-08-01 14:50:00 2018-08-01 15:20:00   0 days 00:30:00

Примечание: Передача infer_datetime_format=True может часто ускорять анализ, если это не такТочно формат ISO8601, но в обычном формате. В некоторых случаях это может увеличить скорость синтаксического анализа на ~ 5-10x.

Следовательно, мы также можем использовать это ..

df['startdate'] = pd.to_datetime(df['startdate'], infer_datetime_format=True)
df['enddate'] = pd.to_datetime(df['enddate'], infer_datetime_format=True)
0 голосов
/ 08 октября 2018

Зависит от нескольких вещей, но если предположить, что startdate и enddate являются столбцами pandas.Timestamp, вы можете просто сделать:

df["Time_Conversation"] = (df["enddate"] - df["startdate"]).astype("timedelta64[s]")

Это даст вам общее количество секунд, котороеРазговор продолжился.Затем дополнительно отформатируйте это в чч: мм: сс, если вам нужно.

Если startdate и enddate столбцы строкового типа, вам необходимо будет дополнительно преобразовать их в правильный формат.

import pandas as pd
df["startdate"] = pd.to_datetime(df["startdate"], infer_datetime_format=True)
df["enddate"] = pd.to_datetime(df["enddate"] ,infer_datetime_format=True)

df["Time_Conversation"] = (df["enddate"] - df["startdate"]).astype("timedelta64[s]")
...