将Pandas Dataframe转换为RCV

将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替换为0NaN,所以这行被丢弃:

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

完美的感谢,任何想法,我怎么能够无视0为好,我用np.triu只得到的上半矩阵 – ThatQuantDude