【问题标题】:How can I count repetitions of cpf in determinate day?如何计算特定日期的 cpf 重复次数?
【发布时间】:2018-10-08 14:08:53
【问题描述】:

我有以下数据框:

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 在 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

【问题讨论】:

  • 在答案中查看所需的输出..
  • 答案没有输出,我需要一整天的CPF差异,例如,捕捉第一次接触并减去最后一次接触并归因于他人cpf
  • 好的,希望您能得到专家的解答!

标签: python dataframe data-science


【解决方案1】:

取决于一些事情,但假设 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]")

【讨论】:

    【解决方案2】:

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

    注意:如果解析不是完全符合 ISO8601 格式,而是采用常规格式,传递 infer_datetime_format=True 通常可以加快解析速度,在某些情况下,这可能会增加解析速度提高了约 5-10 倍。

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

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

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 2016-11-12
      • 2015-11-28
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多