我有以下数据框:
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
答案 0 :(得分:0)
取决于几件事,但是假设startdate
和enddate
是pandas.Timestamp
列,您可以简单地做到:
df["Time_Conversation"] = (df["enddate"] - df["startdate"]).astype("timedelta64[s]")
这将为您提供对话进行的总秒数。然后根据需要将其格式化为hh:mm:ss。
如果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]")
答案 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)