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
对不起,我有点卡住了。
我想使用来自数据框中列的 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