如何将Pandas DataFrame从列索引形状转换为列值汇总值

时间:2019-08-15 19:16:23

标签: python pandas dataframe transformation

我有一些组织(以列,“ fakulta”表示),它们在众多项目(行,“ ID_RIV”)上进行了(或不进行)合作。

输入DF:

df = pd.DataFrame({'FEI':[1,0,0,1,0],
                   'HGF':[0,1,1,0,0],
                   'FBI':[0,1,1,1,1]},
                  index = [1,2,3,4,5])

df.index.name = 'ID_RIV'
df.columns.name = 'fakulta'

print(df)
fakulta  FEI  HGF  FBI
ID_RIV                
1          1    0    0
2          0    1    1
3          0    1    1
4          1    0    1
5          0    0    1

我想知道谁与谁合作。

如何将输入DF转换为对称矩阵(方形DF),如下所示:

所需的输出:

     FEI HGF FBI
FEI    1   0   1
HGF    0   0   2
FBI    1   2   1

1 个答案:

答案 0 :(得分:1)

您可以使用点积,然后再替换对角线。这将完全返回您需要的输出。

import numpy as np
df_out = df.T.dot(df)


df_singles = df.loc[df.sum(axis=1)==1]     
df_singles = df_singles.T.dot(df_singles)   

df_out.values[[np.arange(df_out.shape[0])]*2] = df_singles.values[[np.arange(df_singles.shape[1])]*2]

In [273]: df_out
Out[273]: 
     FEI  HGF  FBI
FEI    1    0    1
HGF    0    0    2
FBI    1    2    1