检查数组中的元素是否存在于 pandas DataFrame 中

8 python numpy dataframe pandas

我有一个 pandas Dataframe 和一个 pandas Series,如下所示。

df0 = pd.DataFrame({'col1':['a','b','c','d'],'col2':['b','c','e','f'],'col3':['d','f','g','a']})

  col1 col2 col3
0    a    b    d
1    b    c    f
2    c    e    g
3    d    f    a

df1 = pd.Series(['b','g','g'], index=['col1','col2','col3'])

col1    b
col2    g
col3    g
dtype: object
Run Code Online (Sandbox Code Playgroud)

正如您所看到的, 的列df0和 的索引df1是相同的。对于 的每个索引df1,我想知道该索引处的值是否存在于 的相应列中df0df1.col1所以,b我们b只需要查找df0.col1并检查它是否存在。

期望的输出:

array([True, False, True])
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用循环的情况下做到这一点?也许是 numpy 或 pandas 的原生方法?

小智 5

Pandas 的pandas.DataFrame.eq方法可能是最简单的。

df0.eq(df1).any()

col1     True
col2    False
col3     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)


Myk*_*tko 0

您可以利用广播

(df0 == df1).any().values
Run Code Online (Sandbox Code Playgroud)

它也适用于 NumPy ndarrays:

assert (df0.columns == df1.columns).all()

(df0.values == df1.values).any(axis=0)
Run Code Online (Sandbox Code Playgroud)

输出:

array([ True, False,  True])
Run Code Online (Sandbox Code Playgroud)