比较两个具有不同列名的 Pandas 数据框并找到匹配项

我有两个数据框:


df1:


A    B    C

1    ss   123

2    sv   234

3    sc   333

df2:


A    dd   xc

1    ss   123

df2 将始终只有一行。如何检查df1中df2的那一行是否匹配?


吃鸡游戏
浏览 368回答 3
3回答

largeQ

使用 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    C0  1  ss  123

ITMISS

除了 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()

慕田峪9158850

如何检查df1中df2的那一行是否匹配?您可以对齐列,然后检查df1与唯一一行的相等性df2:df2.columns = df1.columnsres = (df1 == df2.iloc[0]).all(1).any()  # True这个解决方案的好处是你不是子集化df1(昂贵),而是构建一个布尔数据帧/数组(便宜)并检查是否至少一行中的所有值都是True.这仍然不是特别有效,因为您正在考虑每一行df1而不是在满足条件时停止。特别是对于数字数据,有更有效的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python