Pandas - 如何添加索引来自 DateTimeIndex 列表的新空行?

Pandas - How adding new empty rows with index coming from a list of DateTimeIndex?

对不起,我有点卡住了。

我想使用来自数据框中列的 DateTimeIndex 在另一个数据框中创建新行。

这些 DateTimeIndex 必须用作新行的索引。

因此使用以下数据:

import pandas as pd

df = pd.DataFrame({'Start': [pd.Timestamp('1970-01-02 00:00:00'),pd.Timestamp('1970-03-02 00:00:00')], 'End': [pd.Timestamp('1970-01-02 00:10:00'), pd.Timestamp('1970-03-02 00:10:00')], 'Freq': [pd.Timedelta(5,'m'),pd.Timedelta(5,'m')]})
df = df.apply(lambda x: pd.date_range(start = x.Start, end = x.End, freq = x.Freq), axis=1)

df2 = pd.DataFrame({'Timestamp':[pd.Timestamp('1970-01-03 00:00:00')], 'Data':[4]}).set_index('Timestamp')

我得到输入:

In [62]: df2.index
Out[62]: DatetimeIndex(['1970-01-03'], dtype='datetime64[ns]', name='Timestamp', freq=None)

In[63]: df.to_list()
Out[21]: 
[DatetimeIndex(['1970-01-02 00:00:00', '1970-01-02 00:05:00',
                '1970-01-02 00:10:00'],
               dtype='datetime64[ns]', freq='5T'),
 DatetimeIndex(['1970-03-02 00:00:00', '1970-03-02 00:05:00',
                '1970-03-02 00:10:00'],
               dtype='datetime64[ns]', freq='5T')]

我想要得到的是一个基于 df2 的数据框,带有新行,时间戳来自 df。

df2_new
                    Data
Timestamp       
1970-01-03 00:00:00    4
1970-01-02 00:00:00
1970-01-02 00:05:00
1970-01-02 00:10:00
1970-03-02 00:00:00
1970-03-02 00:05:00
1970-03-02 00:10:00

我尝试使用以下行,但出现错误:

df2.reindex(df2.index.to_list() + df.to_list())

TypeError: unhashable type: 'DatetimeIndex'

我给出的例子被简化为 df 有一行,但它可以有几行。

拜托,你知道我该怎么做吗?

在此先感谢您的帮助! 晚上好, 最佳!

IIUC,您可以稍微不同地定义您的 'time range',但关键步骤是使用 pd.Index.union:

import pandas as pd

df = pd.DataFrame({'Start':[pd.Timestamp('1970-01-02 00:00:00')], 
                   'End':[pd.Timestamp('1970-01-02 00:10:00')], 
                   'Freq':[pd.Timedelta(5,'m')]})
timerange = df.apply(lambda x: pd.Series(pd.date_range(start = x.Start, 
                                                       end = x.End, 
                                                       freq = x.Freq)), 
                     axis=1).stack()[0]

df2 = pd.DataFrame({'Timestamp':[pd.Timestamp('1970-01-03 00:00:00')], 
                    'Data':[4]}).set_index('Timestamp')

df2 = df2.reindex(df2.index.union(timerange))
df2

输出:

                     Data
1970-01-02 00:00:00   NaN
1970-01-02 00:05:00   NaN
1970-01-02 00:10:00   NaN
1970-01-03 00:00:00   4.0