如何在Scala中计算DataFrame内两个日期时间的分钟差值并新增列?
计算DataFrame中日期时间的分钟差值
要解决这个问题,我们需要先把分开的日期和时间列合并成完整的datetime对象,再计算两者的差值并转换为分钟。下面是具体的实现步骤,用Python的pandas库来完成:
1. 构造原始DataFrame
首先,我们先把你提供的数据转换成可操作的pandas DataFrame:
import pandas as pd data = { 'empId': [1234, 1235], 'lId': [1212, 1212], 'date1': ['2018-04-20', '2018-04-20'], 'time1': ['21:40:29.077', '22:40:29.077'], 'date2': ['2018-04-20', '2018-04-21'], 'time2': ['22:40:29.077', '00:40:29.077'] } df = pd.DataFrame(data)
2. 计算时间差值(分钟)
我们需要将date和time列合并为完整的datetime格式,然后计算差值:
方法一:分步处理(清晰直观)
# 合并日期和时间,转换为datetime类型 df['datetime1'] = pd.to_datetime(df['date1'] + ' ' + df['time1']) df['datetime2'] = pd.to_datetime(df['date2'] + ' ' + df['time2']) # 计算差值,转换为分钟(总分钟数) df['TimeDiff'] = (df['datetime2'] - df['datetime1']).dt.total_seconds() // 60 # 可以选择删除中间的datetime列(如果不需要的话) # df = df.drop(['datetime1', 'datetime2'], axis=1)
方法二:链式操作(更简洁)
如果你喜欢更紧凑的代码,可以用链式调用完成:
df['TimeDiff'] = ( pd.to_datetime(df['date2'] + ' ' + df['time2']) - pd.to_datetime(df['date1'] + ' ' + df['time1']) ).dt.total_seconds() // 60
3. 最终输出结果
执行上述代码后,你的DataFrame会变成如下形式:
| empId | lId | date1 | time1 | date2 | time2 | TimeDiff |
|---|---|---|---|---|---|---|
| 1234 | 1212 | 2018-04-20 | 21:40:29.077 | 2018-04-20 | 22:40:29.077 | 60 |
| 1235 | 1212 | 2018-04-20 | 22:40:29.077 | 2018-04-21 | 00:40:29.077 | 120 |
注意事项
pd.to_datetime可以自动识别这种标准的日期+时间字符串格式,不需要额外指定格式参数。- 使用
dt.total_seconds()可以获取差值的总秒数,再除以60得到分钟数;用//会取整数结果,如果需要保留小数直接除以60即可。
内容的提问来源于stack exchange,提问作者Vinju
相关产品推荐
相关产品推荐

