2015-11-10 20 views

答えて

4

あなたはconcatkeysパラメータを渡すと、結果のデータフレームの列は、元のデータフレームを追跡マルチインデックスで構成されます。

In [1]: c=pd.concat([df,df2],axis=1,keys=['df1','df2']) 
     c 

Out[1]: 
    df1   df2 
    a b c a b c 
A na na na 1 na 1 
B na 1 1 na na na 
C na 1 na na 1 na 
D NaN NaN NaN na 1 na 

基礎となる配列は、今同じを持っているので、あなたが疎な行列を使用することができ、あなたの「NA」の値は、ゼロが実際にしている場合

In [171]: m=c.df1[c.df1==c.df2];m 
Out[171]: 
    a b c 
A NaN NaN NaN 
B NaN NaN NaN 
C NaN 1 NaN 
D NaN NaN NaN 

:形状、あなたは今、すべての一致する値を返すために、あなたの比較を放送し、マスクとしてこれを使用する==を使用することができます(あなたががあなたのインデックスと列の名前を失うことになる)マッチング値の座標にこれを削減:

import scipy.sparse as sp 
print(sp.coo_matrix(m.where(m.notnull(),0))) 
    (2, 1) 1.0 
+0

非常にいい答えですが、私はそこに 'すべて'の代わりに '任意の'が必要だと思います。また、OPは引き続き一致する列を見つける必要があります。 –

+0

偉大な答え

+0

@levあなたは正しいです、私は彼の質問を誤解、私は私の答えを編集しました – maxymoo

0

あなただけの異なる指標を使用する場合は、あなたが行うことができます:different_indices = [(i,j) for i in range(len((df1 != df2).columns)) for j in range(len(df1 != df2)) if (df1 != df2)[i][j]]

あるいは、少しだけわかりやすい:

m = (df1 != df2) 
different_indices = [(i,j) for i in range(len(m.columns)) for j in range(len(m)) if m[i][j]] 
関連する問題