日期获取数字时间

2024-09-28 21:02:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下带有日期和间隔的数据帧示例:

       Date     Interval        
0   2013-08-01  14:00:00                
1   2013-08-01  14:15:00                
2   2013-08-01  14:30:00                
3   2013-08-01  14:45:00        
4   2013-08-01  15:00:00
        ...

我想要的是一个新列,其中的间隔映射如下:

00:00:00 = 1            
00:15:00 = 2                
00:30:00 = 3        
00:45:00 = 4
    ...
23:45:00 = 96

所以每15分钟就是一个间隔。 数据帧中的行是混合的,所以我不能启动计数器并增加值。我需要使用Interval列中的time值来获取新列中的映射值

我试过:

dates = pandas.to_datetime(df['Interval'])
df['IntervalMapped']= dates.dt.hour * 2 + dates.dt.minute//15 + 1

但这是错误的


Tags: to数据示例pandasdfdatetimedate间隔
3条回答

IIUC,我想你想要这个:

 df['timestamp'] = pd.to_datetime(df['Date'] + ' ' + df['Interval'])
 df['IntervalMap'] = df['timestamp'].dt.hour.mul(4) + df['timestamp'].dt.minute.floordiv(15) + 1

输出:

         Date  Interval           timestamp  IntervalMap
0  2013-08-01  14:00:00 2013-08-01 14:00:00           57
1  2013-08-01  14:15:00 2013-08-01 14:15:00           58
2  2013-08-01  14:30:00 2013-08-01 14:30:00           59
3  2013-08-01  14:45:00 2013-08-01 14:45:00           60
4  2013-08-01  15:00:00 2013-08-01 15:00:00           61

我想你可能想把“hms”表单当作文本,然后编写自己的计数函数?希望这有帮助

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def converter(hms):
    """Takes a time in hms returns number of 15 second intervals after 00:00:00.
    """
    h,m,s = hms.split(':')
    return int(h)*4+int(m)//15


converter('02:15:00')  # 9

path = 'YOUR path'
new_df = pd.read_csv(path+'stack.txt')

new_df['Interval Mapped'] = new_df['Interval'].apply(lambda x: converter(x))
new_df

创建一个包含最小和最大日期+间隔的序列,并将其映射到datetime列

df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Interval'])

rng = pd.date_range(df['datetime'].min(), df['datetime'].max(), freq = '15T')
s = pd.Series(np.arange(1, len(rng)+1, 1), index = rng)

df['IntervalMapped'] = df['datetime'].map(s)
df.drop('datetime', axis = 1, inplace = True)

    Date        Interval    IntervalMapped
0   2013-08-01  14:00:00    1
1   2013-08-01  14:15:00    2
2   2013-08-01  14:30:00    3
3   2013-08-01  14:45:00    4
4   2013-08-01  15:00:00    5

相关问题 更多 >