我有一个表示协方差矩阵的数据框。像这样
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/