Pandas 使用np.where或替代方法比较Nan值是正确的

Pandas 使用np.where或替代方法比较Nan值是正确的,pandas,numpy,Pandas,Numpy,我想匹配两列,如果它们都是真的。我需要从一个非常大的数据集中删除子集 我遇到了两个问题: 当rowA.exprityDate=NaN和rowB.exprityDate=NaN时,我的条件返回false。我相信这是因为NaN是一种特殊情况。这有什么办法吗。我的匹配条件状态如下: 有没有办法进行交叉匹配条件?rowA.baseCptyId[0]==rowB.extCptyId[1]和rowA.extCptyId[1]==rowB.extCptyId[0]…使用下表会更清楚一些,其中前两行的匹配列为F

我想匹配两列,如果它们都是真的。我需要从一个非常大的数据集中删除子集

我遇到了两个问题:

  • 当rowA.exprityDate=NaN和rowB.exprityDate=NaN时,我的条件返回false。我相信这是因为NaN是一种特殊情况。这有什么办法吗。我的匹配条件状态如下:
  • 有没有办法进行交叉匹配条件?rowA.baseCptyId[0]==rowB.extCptyId[1]和rowA.extCptyId[1]==rowB.extCptyId[0]…使用下表会更清楚一些,其中前两行的匹配列为False 以下是我使用的匹配条件:

        combine_series = pd.DataFrame(dict(rowA = rowA, rowB = rowB))
        combine_series['Matched'] = np.where(combine_series['rowA'] == combine_series['rowB'], True, False)
    
    下面是得到的匹配列

                                        rowA          rowB Matched
    baseCptyID                       2231200          5900   False
    extCptyID                           5900       2231200   False
    notional                         3.4e+07       3.4e+07    True
    startDate                     2015-05-29    2015-05-29    True
    expiryDate                           NaN           NaN   False
    settlementDate                2020-06-29    2020-06-29    True
    rate                             0.03375       0.03375    True
    spread                               NaN           NaN   False
    paymentFreq                           PA            PA    True
    resetFreq                             PA            PA    True
    modelUsed                       FixedLeg      FixedLeg    True
    PayoutCCY                            AUD           AUD    True
    DayCountConv                ACT/ACT ICMA  ACT/ACT ICMA    True
    join_column                      2231200       2231200    True
    

    让我们试试这个逻辑,它利用了NaN的优势!=南认为这是真的

    df['Matched']=(df.rowA == df.rowB) | ((df.rowA != df.rowA) & (df.rowB != df.rowB))
    
    输出:

                           rowA          rowB Matched
    baseCptyID           2231200          5900   False
    extCptyID               5900       2231200   False
    notional             3.4e+07       3.4e+07    True
    startDate         2015-05-29    2015-05-29    True
    expiryDate               NaN           NaN    True
    settlementDate    2020-06-29    2020-06-29    True
    rate                 0.03375       0.03375    True
    spread                   NaN           NaN    True
    paymentFreq               PA            PA    True
    resetFreq                 PA            PA    True
    modelUsed           FixedLeg      FixedLeg    True
    PayoutCCY                AUD           AUD    True
    DayCountConv    ACT/ACT ICMA  ACT/ACT ICMA    True
    join_column          2231200       2231200    True
    

    让我们试试这个逻辑,它利用了NaN的优势!=南认为这是真的

    df['Matched']=(df.rowA == df.rowB) | ((df.rowA != df.rowA) & (df.rowB != df.rowB))
    
    输出:

                           rowA          rowB Matched
    baseCptyID           2231200          5900   False
    extCptyID               5900       2231200   False
    notional             3.4e+07       3.4e+07    True
    startDate         2015-05-29    2015-05-29    True
    expiryDate               NaN           NaN    True
    settlementDate    2020-06-29    2020-06-29    True
    rate                 0.03375       0.03375    True
    spread                   NaN           NaN    True
    paymentFreq               PA            PA    True
    resetFreq                 PA            PA    True
    modelUsed           FixedLeg      FixedLeg    True
    PayoutCCY                AUD           AUD    True
    DayCountConv    ACT/ACT ICMA  ACT/ACT ICMA    True
    join_column          2231200       2231200    True
    
    可能的重复可能的重复