【问题标题】:Using isna() as a condition in a if else statement在 if else 语句中使用 isna() 作为条件
【发布时间】:2021-12-29 16:56:22
【问题描述】:

我有一个如下所示的 df,其中包含更多行:

LastTravelDate TripStartDate TripEndDate
2021-07-10 2021-08-16 NaT
2021-08-28 2021-09-30 NaT
2021-07-29 2021-09-27 2021-09-28

我正在尝试编写一个循环,该循环遍历 df 中的每一行并将 LastTravelDate 的第 i 个值设置为 TripEndDate 的第 i 个值。只要 TripEndDate 等于 NaT,我希望脚本将 LastTravelDate 的第 i 个值设置为 TripStartDate 中的相应值。

我的问题是代码似乎忽略了 if/else 语句中的所有细节,只是将所有 df.LastTravelDate 设置为等于 df.TripStartDate。应该发生的是 df.LastTravelDate 和 df.TripStartDate 仅在 df.TripEndDate 为空时相等。但是,这些在任何情况下都相等。以下是我正在使用的完整代码。

for i in range(df.shape[0]): 
    if np.any(df.loc[df.TripEndDate.isna()]):
        df["LastTravelDate"][i] = df.TripStartDate[i]
    else:
        df["LastTravelDate"][i] = df.TripEndDate[i]
           

谢谢

【问题讨论】:

标签: python pandas numpy if-statement


【解决方案1】:

对于矢量化方法,您可以使用np.where()

df['LastTravelDate'] = np.where(df['TripEndDate'].isna(),df['TripStartDate'],df['TripEndDate'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多