私は、比較したい2つのパンダのデータフレームを持っています。例えばこの場合異なる形状の2つのデータフレームで同じデータを見つける
b
C 1
で
a b c
A na na na
B na 1 1
C na 1 na
と
a b c
A 1 na 1
B na na na
C na 1 na
D na 1 na
私はインデックスの列が共有されている任意の値の座標見つけたいが、これは可能ですか?
私は、比較したい2つのパンダのデータフレームを持っています。例えばこの場合異なる形状の2つのデータフレームで同じデータを見つける
b
C 1
で
a b c
A na na na
B na 1 1
C na 1 na
と
a b c
A 1 na 1
B na na na
C na 1 na
D na 1 na
私はインデックスの列が共有されている任意の値の座標見つけたいが、これは可能ですか?
あなたはconcat
にkeys
パラメータを渡すと、結果のデータフレームの列は、元のデータフレームを追跡マルチインデックスで構成されます。
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
あなただけの異なる指標を使用する場合は、あなたが行うことができます: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]]
非常にいい答えですが、私はそこに 'すべて'の代わりに '任意の'が必要だと思います。また、OPは引き続き一致する列を見つける必要があります。 –
偉大な答え –
@levあなたは正しいです、私は彼の質問を誤解、私は私の答えを編集しました – maxymoo