我对Python和数据科学真的很陌生。
我有一个包含100K +行的数据集,并且有30列(两个日期时间,27个整数和1个字符串)。 我想通过计算两个datetimes列之间的差异来创建第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)
问题是我遇到内存错误,我做错了什么?实现此目标的最佳方法是什么?
答案 0 :(得分:2)
您可以尝试:
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