2017-10-04 2 views
1

私を助けてくれることを願っています。私はパイソンとパンダには新しいので、私と一緒に抱きしめてください。私は3つのデータフレームの間に共通の単語を見つけようとしています。私は木星ノートを使用しています。複数のデータフレーム列間で共通の要素を見つける

ただ、例えば:

df1= 
A 
dog 
cat 
cow 
duck 
snake 

df2= 
A 
pig 
snail 
bird 
dog 

df3= 
A 
eagle 
dog 
snail 
monkey 

A.私は一意であるすべての列の間で 1.一般的な単語 2.言葉を見つけるしたいすべてのデータフレームにおける1列のみがあります共通のコラムではありません。例。アヒルはdf1に固有であり、カタツムリはdf2に固有であり、サルはdf3に独特である。私は私が間違っているつもりどこ親切に私に知らせて、私は単純欲しいもの

df1[df1['A'].isin(df2['A']) & (df2['A']) & (df3['A'])] 

を取得し、いくつかの使用に以下のコードを使用しなくています。乾杯

答えて

1

あなたの現在のアプローチの問題はチェーン複数のisinコールが必要です。さらに悪いのは、どのデータフレームが最大であるかを把握する必要があり、isinと呼んだ場合、それはです。それ以外の場合、動作しません。

物事を簡単にするために、あなたはnp.intersect1dを使用することができます。

>>> np.intersect1d(df3.A, np.intersect1d(df1.A, df2.A)) 
array(['dog'], dtype=object) 

functools.reduce + intersect1dby piRSquaredを使用して同様の方法:

>>> from functools import reduce # python 3 only 
>>> reduce(np.intersect1d, [df1.A, df2.A, df3.A]) 
array(['dog'], dtype=object) 
+1

'(np.intersect1d、[df1.A、df2.A、df3.A])' – piRSquared

+0

を減らす@piRSquaredはい...良いですね!ありがとう。 –

+0

こんにちはcoldspeed、それは動作します!それに感謝します。上記の質問と同じ質問をしたいと思います。引用符やコンマを使わずに出力を得るには?あなたの時間と助けに感謝します。 – Tikku

2

最も簡単な方法は、set交差点

list(set(df1.A) & set(df2.A) & set(df3.A)) 

['dog'] 
を使用することです

しかし、長いリストがある場合はfunctoolsからreduceを使用します。この同じテクニックは、@cᴏʟᴅsᴘᴇᴇᴅのnp.intersect1dの使用にも使用できます。

from functools import reduce 

list(reduce(set.intersection, map(set, [df1.A, df2.A, df3.A]))) 

['dog'] 
+0

こんにちは、あなたのinoutのために非常にありがとう。はい、それは出力を得るときには動作しますが、すべてがカンマで区切られた単一引用符で囲まれています。それらをクリーンなリストとして取り出すことは可能ですか?あなたの時間と助けに感謝します。 – Tikku

関連する問題