2016-05-03 8 views
0

私は2つのデータフレームdf1とdf2を持っています。すなわち、いくつかの指標について、(i、j)_n df1.loc [i] == df2.loc [j]。私はこの対応を見たいと思います。他のデータフレームにどの行が存在するかを確認する

これは追跡するのが難しい問題でした。私は各列の各列について "手動で"照会したくないので、私は何かをよりきれいに探しています。

これは私が持っている最高ですが、速くはありません。私はいくつかの教祖が正しい方向に私を向けることを望んでいます。

matching_idx=[] 
for ix in df1.index: 
    match =df1.loc[ix:ix].to_dict(orient='list') 
    matching_idx.append(df2.isin(match).all(axis=1) ) 

forループを削除するといいですが、それが可能であるかどうかはわかりません。

答えて

1

各データフレームの行が一意であると仮定すると、2つのデータフレームを連結して重複を検索できます。

df1 = pd.DataFrame({'A': ['a', 'b'], 'B': ['a', 'c']})  
df2 = pd.DataFrame({'A': ['c', 'a'], 'B': ['c', 'a']}) 

>>> df1 
    A B 
0 a a 
1 b c 

>>> df2 
    A B 
0 c c 
1 a a 

df = pd.concat([df1, df2]) 

# Returns the index values of duplicates in `df2`. 
>>> df[df.duplicated()] 
    A B 
1 a a 

# Returns the index value of duplicates in `df1`. 
>>> df[df.duplicated(keep='last')] 
    A B 
0 a a 
+0

を私はPYOakはあなたがシンプル – user3391229

+0

で破った。しかし、あなたが重複を含む行のインデックスの場所を失うことがあると考えています。最初の例は 'df1'のdupの位置である '1'で索引付けされています。 2番目の例は、 'df2'のdupの位置である' 0'でインデックスされています。 – Alexander

+0

あなたは正しいです。私はPYOakのソリューションを実装しているにもかかわらず、質問に対する最良の答えを与えるための正しい答えを与えています – user3391229

1

あなたはすべての列に加わり、マージ行うことができます。

match = df1.merge(df2, on=list(df1.columns)) 
+0

"マージ"を働かせようと恥ずかしいほど長い時間をかけていました... "インジケータ" 「内側」、「on_left」など ありがとうございました! – user3391229

関連する問題