我有一个名为rolling_vol_monthly的索引DataFrame:
rolling_vol_monthly DataFrame(579 行 × 10 列):
NoDur Durbl Manuf Enrgy HiTec Telcm Shops Hlth Utils Other
Date
1972-11-30 0.00666 0.00939 0.00803 0.00851 0.01205 0.00799 0.00795 0.00819 0.00505 0.00892
1972-12-31 0.00664 0.00943 0.00800 0.00837 0.01185 0.00792 0.00794 0.00804 0.00504 0.00889
我想将该数据帧转换为:
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))
rolling_cov_monthly 具有所需索引的位置。
答案 0 :(得分:1)
您需要通过选择第一个值或通过 ravel
来展平值:
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)
或者您可以通过DataFrame.iloc
按位置选择第一个值:
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