gpt4 book ai didi

python - Pandas :在两次之间生成日期时间并将结果作为数据框中的新行传递

转载 作者:太空宇宙 更新时间:2023-11-04 04:01:35 26 4
gpt4 key购买 nike

我正在处理具有以下结构的数据框 df:

   start_time            end_time                key            vol
0 2018-08-23 00:00:00 2018-08-23 01:30:00 abcd_eg 0.92
1 2018-08-23 00:15:00 2018-08-23 01:45:00 defg_x2 0.27

我正在尝试在开始时间和结束时间之间生成 15 分钟的间隔。我想在同一数据框(或新数据框)中产生新行,如下所示:

 start_time            end_time                  key             vol
0 2018-08-23 00:00:00 2018-08-23 01:30:00 abcd_eg 0.92
1 2018-08-23 00:15:00 2018-08-23 01:30:00 abcd_eg 0.92
2 2018-08-23 00:30:00 2018-08-23 01:30:00 abcd_eg 0.92
3 2018-08-23 00:45:00 2018-08-23 01:30:00 abcd_eg 0.92
4 2018-08-23 01:00:00 2018-08-23 01:30:00 abcd_eg 0.92
5 2018-08-23 01:15:00 2018-08-23 01:30:00 abcd_eg 0.92
6 2018-08-23 01:30:00 2018-08-23 01:30:00 abcd_eg 0.92
7 2018-08-23 00:15:00 2018-08-23 01:45:00 defg_x2 0.27
8 2018-08-23 00:30:00 2018-08-23 01:45:00 defg_x2 0.27
9 2018-08-23 00:45:00 2018-08-23 01:45:00 defg_x2 0.27
10 2018-08-23 01:00:00 2018-08-23 01:45:00 defg_x2 0.27
11 2018-08-23 01:15:00 2018-08-23 01:45:00 defg_x2 0.27
12 2018-08-23 01:30:00 2018-08-23 01:45:00 defg_x2 0.27
13 2018-08-23 01:45:00 2018-08-23 01:45:00 defg_x2 0.27

日期列的类型是datetime[64],key是object,vol是float。到目前为止我尝试的是:

b=[]
lst = []
for i, row in df.iterrows():
b = pd.date_range(start=row.start_time, end=row.end_time, freq='15min',closed=None)
lst.append(b)

使用 .iterrows() 因为我有大约 125 条记录。这为我提供了数据帧中所有开始时间和结束时间值的时间序列 DatetimeIndex,间隔为 15 分钟。

在此之后,我尝试将 lst 作为数据帧 df 中的新列 unpack 传递,如下所示:

df['unpack'] = lst

我的想法是,如果我可以将这些值作为 df 中的新列,我可以使用这个 solution将它们提取为行。但是这个过程不起作用。

我怎样才能用 pandas 做到这一点?

最佳答案

我的五十美分:

首先重新创建示例 df:

df = pd.DataFrame({"start_time": [datetime(2018, 8, 23), datetime(2018, 8, 23, 0, 15)],
"end_time": [datetime(2018, 8, 23, 1, 30), datetime(2018, 8, 23, 1, 45)],
"key": ["abcd_eg", "defg_x2"],
"vol": [0.92, 0.27]})

循环开始时间,为每个开始时间创建一个具有所需索引的新数据帧,并将它们存储在列表中。

dfs = []
for row in df.itertuples():
part_df = pd.DataFrame(index=pd.DatetimeIndex(start=row.start_time, end=row.end_time, freq='15T'),
data={'end_time': row.end_time, 'key': row.key, 'vol': row.vol})
part_df.index.name = 'start_time'
dfs.append(part_df)

现在连接所有数据帧并重置索引:

result = pd.concat(dfs).reset_index()

给出以下结果:

    start_time          end_time            key     vol
0 2018-08-23 00:00:00 2018-08-23 01:30:00 abcd_eg 0.92
1 2018-08-23 00:15:00 2018-08-23 01:30:00 abcd_eg 0.92
2 2018-08-23 00:30:00 2018-08-23 01:30:00 abcd_eg 0.92
3 2018-08-23 00:45:00 2018-08-23 01:30:00 abcd_eg 0.92
4 2018-08-23 01:00:00 2018-08-23 01:30:00 abcd_eg 0.92
5 2018-08-23 01:15:00 2018-08-23 01:30:00 abcd_eg 0.92
6 2018-08-23 01:30:00 2018-08-23 01:30:00 abcd_eg 0.92
7 2018-08-23 00:15:00 2018-08-23 01:45:00 defg_x2 0.27
8 2018-08-23 00:30:00 2018-08-23 01:45:00 defg_x2 0.27
9 2018-08-23 00:45:00 2018-08-23 01:45:00 defg_x2 0.27
10 2018-08-23 01:00:00 2018-08-23 01:45:00 defg_x2 0.27
11 2018-08-23 01:15:00 2018-08-23 01:45:00 defg_x2 0.27
12 2018-08-23 01:30:00 2018-08-23 01:45:00 defg_x2 0.27
13 2018-08-23 01:45:00 2018-08-23 01:45:00 defg_x2 0.27

关于python - Pandas :在两次之间生成日期时间并将结果作为数据框中的新行传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58216503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com