Pandas/pythonに2つのシリーズs1とs2があり、交差点、つまりシリーズのすべての値が共通である場所を計算したいです。
Concat関数を使用してこれを行うにはどうすればよいですか?私はそれを解決しようとしましたが、できませんでした(s1とS2のインデックスではなく、値で交差を計算したくない)。
前もって感謝します。
セットアップ:
s1 = pd.Series([4,5,6,20,42])
s2 = pd.Series([1,2,3,5,42])
タイミング:
%%timeit
pd.Series(list(set(s1).intersection(set(s2))))
10000 loops, best of 3: 57.7 µs per loop
%%timeit
pd.Series(np.intersect1d(s1,s2))
1000 loops, best of 3: 659 µs per loop
%%timeit
pd.Series(np.intersect1d(s1.values,s2.values))
10000 loops, best of 3: 64.7 µs per loop
したがって、values
を明示的に使用する場合、numpyのソリューションは小さなシリーズでもセットのソリューションと同等になります。
パンダを使用している場合、NumPyも使用していると思います。 Numpyにはintersect1d
これは、Pandasシリーズで動作します。
例:
pd.Series(np.intersect1d(pd.Series([1,2,3,5,42]), pd.Series([4,5,6,20,42])))
値5および42のシリーズを返します。
Python
s1 = pd.Series([4,5,6,20,42])
s2 = pd.Series([1,2,3,5,42])
s1[s1.isin(s2)]
R
s1 <- c(4,5,6,20,42)
s2 <- c(1,2,3,5,42)
s1[s1 %in% s2]
編集:重複を処理しません。
次のようなマージ演算子を使用できます
pd.merge(df1, df2, how='inner')