web-dev-qa-db-ja.com

Pandasで2つのシリーズ間の交点を見つける

Pandas/pythonに2つのシリーズs1とs2があり、交差点、つまりシリーズのすべての値が共通である場所を計算したいです。

Concat関数を使用してこれを行うにはどうすればよいですか?私はそれを解決しようとしましたが、できませんでした(s1とS2のインデックスではなく、値で交差を計算したくない)。

前もって感謝します。

45
user7289

セットアップ:

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のソリューションは小さなシリーズでもセットのソリューションと同等になります。

30
eldad-a

パンダを使用している場合、NumPyも使用していると思います。 Numpyにはintersect1dこれは、Pandasシリーズで動作します。

例:

pd.Series(np.intersect1d(pd.Series([1,2,3,5,42]), pd.Series([4,5,6,20,42])))

値5および42のシリーズを返します。

12
jbn

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]

編集:重複を処理しません。

7
Glen Thompson

次のようなマージ演算子を使用できます

pd.merge(df1, df2, how='inner')
2
kvb