2 votes

comparer les rangées entre elles de mêmes valeurs dans les colonnes et générer une matrice

J'ai un dataframe comme ci-dessous et je veux comparer les lignes entre elles. Ensuite, il faut compter combien de fois deux lignes ont dans toutes les colonnes la valeur un.

object |A|B|C|D|E
101     1 1 1 1 1
102     1 0 1 0 0
103     0 1 0 1 1

ce que je veux voir (j'ai mis NaN car comparer la même ligne avec elle-même n'a pas de sens).

   101 | 102 | 103
101 NaN   2     3
102 2   NaN     0
103 3     0     NaN

Pour l'instant, je ne fais que ça, mais cela ne concerne que les colonnes, et pas les lignes :

data=pd.DataFrame()#dummy
matrix=data.T.dot(data.T)

2voto

W-B Points 94428

Vous pouvez vérifier auprès de dot

s=df.iloc[:,1:].values
s.dot(s.T)
Out[308]: 
array([[5, 2, 3],
       [2, 2, 0],
       [3, 0, 3]], dtype=int64)

Ensuite, nous recréons le cadre de données

newdf=pd.DataFrame(s.dot(s.T),index=df.object,columns=df.object)
newdf=newdf.astype(float)
newdf.values[[np.arange(len(newdf))]*2]=np.nan # mask the diagonal to nan
newdf
Out[312]: 
object  101  102  103
object               
101     NaN  2.0  3.0
102     2.0  NaN  0.0
103     3.0  0.0  NaN

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X