python - 100K+ 行数据集中的日期时间差(以秒为单位)
问题描述
我对 Python 和数据科学真的很陌生。
我有一个包含 100K+ 行的数据集,并且像 30 列(两个日期时间、27 个整数和 1 个字符串)。我想通过计算我的两个日期时间列之间的差异来创建第 31 列,并在几秒钟内得到结果。另外,我想让“-5000”作为我两个日期之间的最小差异。
因此,为了简单起见,我们只关注两个 Datetime 列。
目标是从这个出发:
first_datetime second_datetime
0 2019-03-13 04:35:30 2019-03-13 05:35:30
1 2019-03-13 05:35:30 2019-03-13 06:35:30
2 2019-03-13 05:35:30 2019-03-14 06:35:30
对此:
diff first_datetime second_datetime
0 -3600 2019-03-13 04:35:30 2019-03-13 05:35:30
1 -10 2019-03-13 05:35:30 2019-03-13 05:35:40
2 -5000 2019-03-13 05:35:30 2019-03-14 05:35:40
有人告诉我 .apply 函数是最快的,所以我用它来创建这个函数:
def calc_diff(row):
diff=int((row['first_datetime']-row['second_datetime']).total_seconds())
if diff<-5000:
return -5000
else:
return diff
我将它与 .apply 功能一起使用:
df = pd.DataFrame([{'first_datetime': "2019-03-13 04:35:30", 'second_datetime': "2019-03-13 05:35:30"},{'first_datetime': "2019-03-13 05:35:30", 'second_datetime': "2019-03-13 05:35:40"}])
df['diff']=df.apply(calc_diff, axis=1)
问题是我得到一个内存错误,我做错了什么?实现这一目标的最佳方法是什么?
解决方案
你可以试试:
df["diff"]= (df["first_datetime"]-df["second_datetime"]).dt.seconds.clip(lower=-5000)
编辑: 关于 beetwen dt.seconds 和 dt.total_seconds() 的区别:
(pd.Timestamp("2019-10-13 00:00:50")-pd.Timestamp("2019-10-10 00:00:00")).seconds
Out: 50
(pd.Timestamp("2019-10-13 00:00:50")-pd.Timestamp("2019-10-10 00:00:00")).total_seconds()
Out: 259250.0
推荐阅读
- java - RequestFocus 和 ReqeustFocusFromTouch 的区别?
- android - 如何从 admob 添加 NATIVE 广告?
- push-notification - 使用 PHP 发送推送通知
- ios - 隐藏视图及其全部内部视图
- mapkit - 在地图中包裹纬度和经度时崩溃
- java - 通过点击 CardView 中的不同卡片打开不同的活动,Android studio 中的 Recyclerview Fragment
- python - apscheduler:任务完成后如何结束调度程序
- excel - 删除行直到定义列的宏代码
- c# - 将对象列表转换为类型数组并删除空值
- python - 如何将每个数组数据保存到数据库?一个数据作为一行