Python 检查另一个数据帧中是否存在多行

Python 检查另一个数据帧中是否存在多行,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有两个数据帧。我想看看其他数据帧中是否存在特定的行(全部)。df_子集中的示例行: id category value date 1 A 10 01-01-15 3 C 10 03-01-15 另一个df_已满: id category value date 1 A 10 01-01-15 2 B 10

我有两个数据帧。我想看看其他数据帧中是否存在特定的行(全部)。df_子集中的示例行:

id    category    value    date
1     A           10       01-01-15
3     C           10       03-01-15
另一个df_已满:

id    category    value    date
1     A           10       01-01-15
2     B           10       02-01-15
3     C           10       03-01-15
4     D           16       04-01-15
是否有办法检查一个数据帧的行是否存在于另一个数据帧中?类似这样的内容(显然这不起作用):
df\u full
中的df\u子集是否存在

> True
您可以使用以下方法:

我认为您可以使用with internal join(默认情况下)with for compare with
df_subset

print (pd.merge(df_subset,df).equals(df_subset))
True
使用
numpy

(df_subset.values[:, None] == df_full.values).all(2).any(1).all()

True
定时

解释

# using [:, None] to extend into new dimension at
# take advantage of broadcasting
a1 = df_subset.values[:, None] == df_full.values

     # ━> third dimension ━>
     # ━━━━> axis=2 ━━━>
# 1st dim
---->[[[ True  True  True  True]   # │
       [False False  True False]   # │ second dimension
       [False False  True False]   # │ axis=1
       [False False False False]]  # ↓

 # axis=0
 ---->[[False False  True False]   # │ 
       [False False  True False]   # │ second dimension
       [ True  True  True  True]   # │ axis=1
       [False False False False]]] # ↓

# first row of subset with each row of full 
[[[ True  True  True  True]  <-- This one is true for all 
  [False False  True False]
  [False False  True False]
  [False False False False]]

# second row of subset with each row of full 
 [[False False  True False] 
  [False False  True False]
  [ True  True  True  True]  <-- This one is true for all
  [False False False False]]]



df_子集的所有行
df_full

I扩展数组到三维。所有(2)沿第三轴。我会更新帖子,让它更清晰,这真的很复杂。Numpy对我来说很复杂,我更喜欢熊猫。
# using [:, None] to extend into new dimension at
# take advantage of broadcasting
a1 = df_subset.values[:, None] == df_full.values

     # ━> third dimension ━>
     # ━━━━> axis=2 ━━━>
# 1st dim
---->[[[ True  True  True  True]   # │
       [False False  True False]   # │ second dimension
       [False False  True False]   # │ axis=1
       [False False False False]]  # ↓

 # axis=0
 ---->[[False False  True False]   # │ 
       [False False  True False]   # │ second dimension
       [ True  True  True  True]   # │ axis=1
       [False False False False]]] # ↓

# first row of subset with each row of full 
[[[ True  True  True  True]  <-- This one is true for all 
  [False False  True False]
  [False False  True False]
  [False False False False]]

# second row of subset with each row of full 
 [[False False  True False] 
  [False False  True False]
  [ True  True  True  True]  <-- This one is true for all
  [False False False False]]]
a2 = a1.all(2)

#   ┌─ first row of subset all equal
[[ True False False False]
 [False False  True False]]
#               └─ second row of subset all equal
a3 = a2.any(1)

#  ┌─ first row of subset matched at least one row of full
[ True  True]
#        └─ second row of subset matched at least one row of full
a3.all()

True