【问题标题】:Pandas conditional statement with NaT带有 NaT 的 Pandas 条件语句
【发布时间】:2017-07-08 18:14:42
【问题描述】:

所以,我有一个包含许多变量的数据框。索引为uid,其他变量均为日期。

当某个值为 NaT 但我找不到正确的语句时,我正在尝试创建标志变量。

我想要这样的东西:

auxData['flagInvited'] = np.where(auxData['invited'] == NaT, 0, 1)

我怎样才能轻松做到这一点?

【问题讨论】:

    标签: python pandas numpy dataframe conditional


    【解决方案1】:

    我认为您需要notnull 转换为boolean mask,然后转换为int - True1False0

    auxData['flagInvited'] = auxData['invited'].notnull().astype(int)
    

    示例:

    auxData = pd.DataFrame({'invited':[np.nan, '2017-01-01','2017-03-03']})
    auxData.invited = pd.to_datetime(auxData.invited, dayfirst=True)
    print (auxData)
         invited
    0        NaT
    1 2017-01-01
    2 2017-03-03
    
    print (auxData['invited'].notnull())
    0    False
    1     True
    2     True
    Name: invited, dtype: bool
    
    auxData['flagInvited'] = auxData['invited'].notnull().astype(int)
    print (auxData)
         invited  flagInvited
    0        NaT            0
    1 2017-01-01            1
    2 2017-03-03            1
    

    【讨论】:

    • 如果我可以问你最后一件事,当我在 2 个日期时间变量之间做减法时,我如何将结果返回为天数?
    • 当然,如果需要输出为int,则需要print ((df['date1'] - df['date2']).dt.days)
    猜你喜欢
    • 2020-05-24
    • 2020-05-31
    • 2021-11-13
    • 1970-01-01
    • 2017-06-24
    • 2021-06-19
    • 2019-06-12
    • 2020-08-18
    • 2017-12-02
    相关资源
    最近更新 更多