2017-09-04 8 views
2

私は共分散行列s.thを表すデータフレームを持っています。Pandas DataframeをRCVに変換

  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 

になり、この

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 

ように私は私が

Idx1 Idx2 Value 
    AA  AA 0.271191 
    AA  BB -1.064020 
    AA  CC -0.311409 
    ...  ... .... 
    DD  EE -1.429021 
    EE  EE 0.794784 

次の形式でメモリサイズ上の理由から、すべて0を落としながら、CSVとしてこれを保存したいですpandas pivoting関数を使ってみましたが、私はその逆が必要だと思います。

答えて

1

使用stackNaN0を交換するので、この行は破棄されます。

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を使用し、同様に0を無視することができますどのように任意のアイデアをマトリックス – ThatQuantDude

関連する問題