【问题标题】:Comparing Nan Values are True using np.where or alternative使用 np.where 或替代方法比较 Nan 值是否为真
【发布时间】:2017-10-05 13:16:38
【问题描述】:

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

我遇到了 2 个问题:

  1. 当 rowA.exprityDate = NaN 且 rowB.exprityDate = NaN 时,我的条件返回 false。我相信这是因为 NaN 是一个特殊的条件。有没有办法解决。我的匹配条件如下:
  2. 有没有办法进行交叉匹配条件? 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

【问题讨论】:

标签: pandas numpy


【解决方案1】:

让我们试试这个采用 NaN != NaN 解析为 True 的逻辑。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 2020-05-29
    • 2013-12-30
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多