为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

吃鸡游戏 2021-08-17 16:27:10
我有两个数据框:df1:A    B    C1    ss   1232    sv   2343    sc   333df2:A    dd   xc1    ss   123df2 将始终只有一行。如何检查df1中df2的那一行是否匹配?
查看完整描述

3 回答

?
largeQ

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


查看完整回答
反对 回复 2021-08-17
?
ITMISS

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


查看完整回答
反对 回复 2021-08-17
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

如何检查df1中df2的那一行是否匹配?


您可以对齐列,然后检查df1与唯一一行的相等性df2:


df2.columns = df1.columns


res = (df1 == df2.iloc[0]).all(1).any()  # True

这个解决方案的好处是你不是子集化df1(昂贵),而是构建一个布尔数据帧/数组(便宜)并检查是否至少一行中的所有值都是True.


这仍然不是特别有效,因为您正在考虑每一行df1而不是在满足条件时停止。特别是对于数字数据,有更有效的解决方案。


查看完整回答
反对 回复 2021-08-17
  • 3 回答
  • 0 关注
  • 367 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号