如何计算确定天的cpf重复次数?

时间:2018-10-08 14:08:53

标签: python dataframe data-science

我有以下数据框:

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,所以在第一天这个cpf在08/01/2018 12:50:0发起了一次对话,对话的结束是08/01/2018 15:50:0,我需要的是确切地说,这个关于结束日期的减法-开始日期。我怎样才能做到这一点?

  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 :(得分:0)

取决于几件事,但是假设startdateenddatepandas.Timestamp列,您可以简单地做到:

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

这将为您提供对话进行的总秒数。然后根据需要将其格式化为hh:mm:ss。

如果startdateenddate是字符串类型的列,则需要另外转换为正确的格式。

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]")

答案 1 :(得分:0)

首先将日期字符串转换为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-10倍。

因此,我们也可以使用它。.

df['startdate'] = pd.to_datetime(df['startdate'], infer_datetime_format=True)
df['enddate'] = pd.to_datetime(df['enddate'], infer_datetime_format=True)