Python 使用对角矩阵将单索引数据帧转换为多索引数据帧
我有一个名为rolling_vol_monthly的索引数据框: 滚动卷每月数据帧(579行×10列): 我想将该数据帧转换为:Python 使用对角矩阵将单索引数据帧转换为多索引数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个名为rolling_vol_monthly的索引数据框: 滚动卷每月数据帧(579行×10列): 我想将该数据帧转换为: NoDur Durbl Manuf Enrgy HiTec Telcm Shops Hlth Utils Other Date lvl1 1972-11-30 NoDur 0.006660 0
NoDur Durbl Manuf Enrgy HiTec Telcm Shops Hlth Utils Other
Date lvl1
1972-11-30 NoDur 0.006660 0 0 0 0 0 0 0 0
Durbl 0 0.00939 0 0 0 0 0 0 0 0
Manuf 0 0 0.00803 0 0 0 0 0 0 0
Enrgy 0 0 0 0.00851 0 0 0 0 0 0
HiTec 0 0 0 0 0.01205 0 0 0 0 0
Telcm 0 0 0 0 0 0.00799 0 0 0 0
Shops 0 0 0 0 0 0 0.00795 0 0 0
Hlth 0 0 0 0 0 0 0 0.00819 0 0
Utils 0 0 0 0 0 0 0 0 0.00505 0
Other 0 0 0 0 0 0 0 0 0 0.00892
NoDur Durbl Manuf Enrgy HiTec Telcm Shops Hlth Utils Other
Date lvl1
1972-11-31 NoDur 0.006640 0 0 0 0 0 0 0 0
Durbl 0 0.00943 0 0 0 0 0 0 0 0
Manuf 0 0 0.00800 0 0 0 0 0 0 0
Enrgy 0 0 0 0.00837 0 0 0 0 0 0
HiTec 0 0 0 0 0.01185 0 0 0 0 0
Telcm 0 0 0 0 0 0.00792 0 0 0 0
Shops 0 0 0 0 0 0 0.00794 0 0 0
Hlth 0 0 0 0 0 0 0 0.00804 0 0
Utils 0 0 0 0 0 0 0 0 0.00504 0
Other 0 0 0 0 0 0 0 0 0 0.00889
我尝试的代码:
rvm = rolling_vol_monthly.copy()
rvm = rvm.groupby(level='Date').apply(lambda g: pd.DataFrame(data = np.diag(g.values) , index = rolling_cov_monthly.index , columns= rolling_vol_monthly.columns))
如果每月滚动有所需的索引。您需要通过选择第一个值或通过以下方式展平值: 或: 或者,您可以通过以下方式按位置选择第一个值:
rvm = rolling_vol_monthly.copy()
rvm = rvm.groupby(level='Date').apply(lambda g: pd.DataFrame(data = np.diag(g.values) , index = rolling_cov_monthly.index , columns= rolling_vol_monthly.columns))
f = lambda g: pd.DataFrame(data = np.diag(g.values[0]),
index = rvm.columns,
columns= rvm.columns)
f = lambda g: pd.DataFrame(data = np.diag(g.values.ravel()),
index = rvm.columns,
columns= rvm.columns)
f = lambda g: pd.DataFrame(data = np.diag(g.iloc[0].values),
index = rvm.columns,
columns= rvm.columns)
rvm = rvm.groupby(level='Date').apply(f)
print (rvm)
NoDur Durbl Manuf Enrgy HiTec Telcm \
Date
1972-11-30 NoDur 0.00666 0.00000 0.00000 0.00000 0.00000 0.00000
Durbl 0.00000 0.00939 0.00000 0.00000 0.00000 0.00000
Manuf 0.00000 0.00000 0.00803 0.00000 0.00000 0.00000
Enrgy 0.00000 0.00000 0.00000 0.00851 0.00000 0.00000
HiTec 0.00000 0.00000 0.00000 0.00000 0.01205 0.00000
Telcm 0.00000 0.00000 0.00000 0.00000 0.00000 0.00799
Shops 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Hlth 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Utils 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Other 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
1972-12-31 NoDur 0.00664 0.00000 0.00000 0.00000 0.00000 0.00000
Durbl 0.00000 0.00943 0.00000 0.00000 0.00000 0.00000
Manuf 0.00000 0.00000 0.00800 0.00000 0.00000 0.00000
Enrgy 0.00000 0.00000 0.00000 0.00837 0.00000 0.00000
HiTec 0.00000 0.00000 0.00000 0.00000 0.01185 0.00000
Telcm 0.00000 0.00000 0.00000 0.00000 0.00000 0.00792
Shops 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Hlth 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Utils 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Other 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
Shops Hlth Utils Other
Date
1972-11-30 NoDur 0.00000 0.00000 0.00000 0.00000
Durbl 0.00000 0.00000 0.00000 0.00000
Manuf 0.00000 0.00000 0.00000 0.00000
Enrgy 0.00000 0.00000 0.00000 0.00000
HiTec 0.00000 0.00000 0.00000 0.00000
Telcm 0.00000 0.00000 0.00000 0.00000
Shops 0.00795 0.00000 0.00000 0.00000
Hlth 0.00000 0.00819 0.00000 0.00000
Utils 0.00000 0.00000 0.00505 0.00000
Other 0.00000 0.00000 0.00000 0.00892
1972-12-31 NoDur 0.00000 0.00000 0.00000 0.00000
Durbl 0.00000 0.00000 0.00000 0.00000
Manuf 0.00000 0.00000 0.00000 0.00000
Enrgy 0.00000 0.00000 0.00000 0.00000
HiTec 0.00000 0.00000 0.00000 0.00000
Telcm 0.00000 0.00000 0.00000 0.00000
Shops 0.00794 0.00000 0.00000 0.00000
Hlth 0.00000 0.00804 0.00000 0.00000
Utils 0.00000 0.00000 0.00504 0.00000
Other 0.00000 0.00000 0.00000 0.00889