Python 将时间范围转换为时间矩阵的最快方法

Python 将时间范围转换为时间矩阵的最快方法,python,pandas,time-series,Python,Pandas,Time Series,我试图将具有特定值(df1)的时间值范围转换为基于第二频率(df2)索引的矩阵 目前,我正在迭代第一个数据帧,并使用loc函数将值转置到第二个数据帧中的多行,但我认为这是一种很慢的方法,因为迭代非常慢 def创建列(df): x=列表(dict.fromkeys(df['x'])) 返回x 日期\u rng=pd.date\u范围(start=df1.iloc[0]['FROM'],end=df1.iloc[-1]['TO'],freq='s') cols=创建列(df1) df2=pd.Dat

我试图将具有特定值(df1)的时间值范围转换为基于第二频率(df2)索引的矩阵

目前,我正在迭代第一个数据帧,并使用loc函数将值转置到第二个数据帧中的多行,但我认为这是一种很慢的方法,因为迭代非常慢

def创建列(df):
x=列表(dict.fromkeys(df['x']))
返回x
日期\u rng=pd.date\u范围(start=df1.iloc[0]['FROM'],end=df1.iloc[-1]['TO'],freq='s')
cols=创建列(df1)
df2=pd.DataFrame(列=[cols],索引=日期)
对于索引,df1.iterrows()中的行:
日期\u rng=pd.date\u范围(开始=行['FROM'],结束=行['TO'],频率='s'))
df2.loc[日期,第['X']]行]=第['Y'行]
基本df1:

    X   FROM                TO                  Y
0   A   01/01/2019 00:00:00 01/01/2019 00:00:09 1
1   B   01/01/2019 00:00:05 01/01/2019 00:00:14 1
2   A   01/01/2019 00:00:10 01/01/2019 00:00:30 0
3   B   01/01/2019 00:00:15 01/01/2019 00:00:40 0
4   C   01/01/2019 00:00:00 01/01/2019 00:01:00 0
结果df2:

                    A   B   C
01/01/2019 00:00:00 1   1   0
01/01/2019 00:00:01 1   1   0
01/01/2019 00:00:02 1   1   0
01/01/2019 00:00:03 1   1   0
01/01/2019 00:00:04 1   1   0
01/01/2019 00:00:05 1   1   0
01/01/2019 00:00:06 1   1   0
01/01/2019 00:00:07 1   1   0
01/01/2019 00:00:08 1   1   0
01/01/2019 00:00:09 1   1   0
01/01/2019 00:00:10 1   0   0
01/01/2019 00:00:11 1   0   0
01/01/2019 00:00:12 1   0   0

创建从到之间的日期时间的秒范围,添加列X,Y和上次使用:

df1['FROM'] = pd.to_datetime(df1['FROM'])
df1['TO'] = pd.to_datetime(df1['TO'])

df2 = pd.concat([pd.Series(r.Index,pd.date_range(r.FROM, r.TO, freq='s')) 
                 for r in df1.itertuples()]).reset_index()
df2.columns = ['Date','Val']
df2 = df2.join(df1[['X','Y']], on='Val').pivot('Date','X','Y')