如何为每个datetime和每个id创建一行?

2024-10-16 20:42:45 发布

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

我有什么?

我有两个日期-start_dateend_date以及一个ID列表

我想要什么?

我想创建一个DataFrame,每个日期时间间隔为15分钟 start_dateend_date以及id列表中的每个id

我编写了以下函数:

def daterange(start_date, end_date, minutes, id_list):
    lst = []
    delta = timedelta(minutes=minutes)
    while start_date < end_date:
        lst.append(start_date)
        start_date += delta
        
    df1 = pd.DataFrame({'Time':lst})
    df2 = pd.DataFrame({'id': id_list})
    df_time = pd.DataFrame(columns=['Time','id'])
    prod = product(df1.values, df2.values)
    for index, i in enumerate(prod):
        df_time.loc[index] = [i[0][0], i[1][0]]
    
    return df_time

但是我的id列表有200多个id,我的日期是一整年,间隔15分钟,所以运行起来需要很多时间。有更好的方法来实现这一点吗


1条回答
网友
1楼 · 发布于 2024-10-16 20:42:45

具有相同签名的相同函数:

def daterange(start_date, end_date, minutes, id_list):
    dti = pd.date_range(start_date, end_date, freq=f'{minutes}T', closed='left')
    idx = pd.MultiIndex.from_product([dti, id_list], names=['Time', 'id'])
    return idx.to_frame().reset_index(drop=True)
>>> daterange('2021-01-06', '2021-01-07', 360, [1, 2, 3])
                  Time  id
0  2021-01-06 00:00:00   1
1  2021-01-06 00:00:00   2
2  2021-01-06 00:00:00   3
3  2021-01-06 06:00:00   1
4  2021-01-06 06:00:00   2
5  2021-01-06 06:00:00   3
6  2021-01-06 12:00:00   1
7  2021-01-06 12:00:00   2
8  2021-01-06 12:00:00   3
9  2021-01-06 18:00:00   1
10 2021-01-06 18:00:00   2
11 2021-01-06 18:00:00   3

相关问题 更多 >