将Pandas Dataframe转换为RCV
问题描述:
我有一个数据帧表示一个协方差矩阵s.th.这样将Pandas Dataframe转换为RCV
names = ['AA','BB','CC','DD','EE']
x_ = np.random.normal(size=5)
y_ = np.random.normal(size=5)
z = np.vstack((x_, y_))
cov_mat = np.cov(z.T)
cov_mat = np.triu(cov_mat, k=0)
cov_mat_df = pd.DataFrame(cov_mat)
cov_mat_df.index = names
cov_mat_df.columns = names
导致
AA BB CC DD EE
AA 0.271191 -1.064020 -0.311409 0.834741 -0.464261
BB 0.000000 4.174687 1.221814 -3.275110 1.821531
CC 0.000000 0.000000 0.357591 -0.958533 0.533111
DD 0.000000 0.000000 0.000000 2.569378 -1.429021
EE 0.000000 0.000000 0.000000 0.000000 0.794784
我想这个保存为CSV,而放弃对内存大小的原因全部0的格式如下
Idx1 Idx2 Value
AA AA 0.271191
AA BB -1.064020
AA CC -0.311409
... ... ....
DD EE -1.429021
EE EE 0.794784
我尝试使用熊猫旋转功能,但我认为我需要相反的。
答
使用stack
替换为0
到NaN
,所以这行被丢弃:
df = df.replace(0,np.nan).stack().rename_axis(('idx1','idx2')).reset_index(name='Value')
print (df)
idx1 idx2 Value
0 AA AA 0.271191
1 AA BB -1.064020
2 AA CC -0.311409
3 AA DD 0.834741
4 AA EE -0.464261
5 BB BB 4.174687
6 BB CC 1.221814
7 BB DD -3.275110
8 BB EE 1.821531
9 CC CC 0.357591
10 CC DD -0.958533
11 CC EE 0.533111
12 DD DD 2.569378
13 DD EE -1.429021
14 EE EE 0.794784
完美的感谢,任何想法,我怎么能够无视0为好,我用np.triu只得到的上半矩阵 – ThatQuantDude