1

说我有一个pandas.DataFrame喜欢:

            val
2020-01-01   12
2020-04-15   38
2020-05-03   19

我怎样才能创建一个pandas.DataFrame喜欢:

                     val
2020-01-01 00:00:00   12
2020-01-01 00:01:00   12
...   
2020-01-01 23:58:00   12
2020-01-01 23:59:00   12
2020-04-15 00:00:00   38
2020-04-15 00:01:00   38
...   
2020-04-15 23:58:00   38
2020-04-15 23:59:00   38
2020-05-03 00:00:00   19
2020-05-03 00:01:00   19
...   
2020-05-03 23:58:00   19
2020-05-03 23:59:00   19

我已经尝试过df.resample('1 min').asfreq()了,但这给了我从第一行到最后一行的所有分钟数,包括不在原始索引中的所有天数。

4

1 回答 1

0

重新创建您的示例 df:

dates = [ pd.to_datetime('2020-01-01'), pd.to_datetime('2020-04-15'), pd.to_datetime('2020-05-03') ]
val = [12, 38, 19]

df = pd.DataFrame({ 'date' : dates, 'val' : val})
df = df.set_index('date')

我通常不推荐循环,但感觉可能是使用循环更自然的情况。这实际上取决于您要处理的数据量。无论如何,它有效。:)

out = pd.DataFrame()
for row in df.itertuples():
    bars = pd.date_range(row.Index, row.Index+pd.Timedelta(days=1), freq="T", closed='left')
    out = pd.concat([out, pd.DataFrame(data={'val' : row.val}, index=bars)])  

print(out)
                       val
2020-01-01 00:00:00   12
2020-01-01 00:01:00   12
2020-01-01 00:02:00   12
2020-01-01 00:03:00   12
2020-01-01 00:04:00   12
...                  ...
2020-05-03 23:55:00   19
2020-05-03 23:56:00   19
2020-05-03 23:57:00   19
2020-05-03 23:58:00   19
2020-05-03 23:59:00   19

[4320 rows x 1 columns]
于 2021-02-04T20:29:15.690 回答