首页 > 解决方案 > 使用列组合查找行中的数据不匹配 pandas

问题描述

根据列值的组合获取所有单元格值的最佳方法是什么?

示例数据框一:

  Stock                         Name  Price
0    AMD       Advanced Micro Devices    100
1     GE     General Electric Company    200
2    BAC  Bank of America Corporation    300
3   AAPL                   Apple Inc.    500
4   MSFT        Microsoft Corporation   1000
5  GOOGL                Alphabet Inc.   2000

示例数据框二:

  Stock                         Name  Price
0    AMD       Advanced Micro Devices    100
1     GE     General Electric Company    200
2    BAC  Branch of America Corporation  300
3   AAPL                   Apple Inc.    500
4   MSFT        Microsoft Corporation   1000
5  GOOGL                Alphabet Inc.   2000

例如:我想使用 (Stock and Name) 作为键列,然后比较数据集。目标是打印两个数据集之间的不匹配条目,并将 Stock+Name 列用作组合键。

我正在使用熊猫/Python3.7

样本输出:

BAC 美国银行 300 --- BAC 美国分行 300

标签: pythonpython-3.xpandasdataframemerge

解决方案


也许,使用merge+的 FULL INNER JOIN query

df1.merge(df2, on='Stock').query('Name_x != Name_y')

  Stock                       Name_x  Price_x                         Name_y  Price_y
2   BAC  Bank of America Corporation      300  Branch of America Corporation      300

或者,一个稍微不同的解决方案map,您可以使用它来获取股票代码:

m = df1.Stock.map(df2.set_index('Stock').Name).ne(df1.Name)
symbols = df1.loc[m, 'Stock']

print(symbols)
2    BAC
Name: Stock, dtype: object

然后按股票代码访问每个 DataFrame 行:

df1[df1.Stock.isin(symbols)]
  Stock                         Name  Price
2   BAC  Bank of America Corporation    300

df2[df2.Stock.isin(symbols)]
  Stock                           Name  Price
2   BAC  Branch of America Corporation    300

推荐阅读