3 回答

TA贡献2039条经验 获得超7个赞
使用 Numpy 比较与行np.all参数axis=1:
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': ['ss', 'sv', 'sc'], 'C': [123, 234, 333]})
df2 = pd.DataFrame({'A': [1], 'dd': ['ss'], 'xc': [123]})
df3 = df1.loc[np.all(df1.values == df2.values, axis=1),:]
要么:
df3 = df1.loc[np.all(df1[['B','C']].values == df2[['dd','xc']].values, axis=1),:]
print(df3)
A B C
0 1 ss 123

TA贡献1871条经验 获得超8个赞
除了 Sandeep 的回答之外,还可以:
df1[np.all(df1.values == df2.values,1)].any().any()
为了获得一个布尔值。
或者另一种方式:
df1[(df2.values==df1.values).all(1)].any().any()
要么:
pd.merge(df1,df2).equals(df1)
注意:两个输出 True
检查特定列(与 Sandeep 相同):
df1[col].isin(df2[col]).any()

TA贡献1794条经验 获得超7个赞
如何检查df1中df2的那一行是否匹配?
您可以对齐列,然后检查df1与唯一一行的相等性df2:
df2.columns = df1.columns
res = (df1 == df2.iloc[0]).all(1).any() # True
这个解决方案的好处是你不是子集化df1(昂贵),而是构建一个布尔数据帧/数组(便宜)并检查是否至少一行中的所有值都是True.
这仍然不是特别有效,因为您正在考虑每一行df1而不是在满足条件时停止。特别是对于数字数据,有更有效的解决方案。
添加回答
举报