我有一个表示协方差矩阵的数据框。像这样

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


我尝试使用pandas枢纽功能,但我想我需要相反的功能。

最佳答案

使用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

关于python - 将Pandas Dataframe转换为RCV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46039453/

10-17 00:28