您好我有以下数据框
df1 =
Record_ID Time
94704 2014-03-10 07:19:19
94705 2014-03-10 07:21:44
94706 2014-03-10 07:21:45
94707 2014-03-10 07:21:54
94708 2014-03-10 07:21:55
是否有可能跟随?
;WITH CTE AS (
SELECT FIRST, LAST, MAX(FOOD) AS FOOD, COUNT(*) AS COUNT
FROM TABLE1
GROUP BY FIRST, LAST
HAVING COUNT(*) >= 2)
SELECT *
FROM TABLE1
WHERE FIRST+LAST IN (SELECT FIRST+LAST FROM CTE)
答案 0 :(得分:16)
您可以使用datetime64[s]
将基础datetime64[ns]
值转换为astype
值:
In [11]: df['Time'] = df['Time'].astype('datetime64[s]')
In [12]: df
Out[12]:
Record_ID Time
0 94704 2014-03-10 07:19:19
1 94705 2014-03-10 07:21:44
2 94706 2014-03-10 07:21:45
3 94707 2014-03-10 07:21:54
4 94708 2014-03-10 07:21:55
请注意,由于Pandas Series和DataFrame store all datetime values as datetime64[ns]
这些datetime64[s]
值会自动转换回datetime64[ns]
,因此最终结果仍会存储为datetime64[ns]
值,但是调用astype
会导致秒的小数部分被删除。
如果您希望拥有datetime64[s]
个NumPy数组,可以使用df['Time'].values.astype('datetime64[s]')
。
答案 1 :(得分:7)
如果您确实必须删除日期时间的microsecond
部分,则可以使用Timestamp.replace
方法和Series.apply
方法将其应用于整个系列,以替换{{1部分与microsecond
。示例 -
0
演示 -
df['Time'] = df['Time'].apply(lambda x: x.replace(microsecond=0))
答案 2 :(得分:1)
对于0.24.0或更高版本的熊猫,您只需在ceil()函数中设置freq参数即可获得所需的精度:
df['Time'] = df.Time.dt.ceil(freq='s')
In [28]: df
Out[28]:
Record_ID Time
0 94704 2014-03-10 07:19:19
1 94705 2014-03-10 07:21:44
2 94706 2014-03-10 07:21:45
3 94707 2014-03-10 07:21:54
4 94708 2014-03-10 07:21:55