繁体   English   中英

如何有条件地从 pandas Z6A8064B5DF47945555700 中的多个日期时间列中的第一个非 null 日期有条件地 select

[英]How to conditionally select the first non null date from multiple datetime columns in a pandas dataframe?

我有一个带有多个日期时间列的 pandas dataframe。 我想创建一个新列,分别在第一列、第二列或第三列中选择不是 null 的日期第一个日期。 如果这 3 列都没有日期,则设置为今天。

我的数据库的一个例子是:

           date1      date2  date3
0            NaT 2019-01-26    NaT
1     2021-04-13 2021-02-27    NaT
2            NaT        NaT    NaT
3            NaT        NaT    NaT
4            NaT        NaT    NaT

我想创建一个新列,日期 4,第一个日期不是从日期 1 到日期 3 的 NaT。我期望的结果是:

           date1      date2      date3         date4
0            NaT 2019-01-26        NaT    2019-01-26 # (date 2)
1     2021-04-13 2021-02-27        NaT    2021-04-13 # (date 1)
2            NaT        NaT        NaT    2021-06-04 # (today )
3            NaT        NaT        NaT    2021-06-04 # (today )
4            NaT        NaT 2021-02-20    2021-02-20 # (date 3)

我试过这条线:

df["date4"] = df.loc[(df["date1"]) | (df["date2"]) | (df["date3"]) | pd.to_datetime("today")]

但它会引发错误TypeError: unsupported operand type(s) for |: 'DatetimeArray' and 'DatetimeArray'

想法是回填所选列的缺失值,然后 select 第一列由 position 并在today之前替换缺失值:

df['date4'] = (df[['date1','date2','date3']].bfill(axis=1)
                                            .iloc[:, 0]
                                            .fillna(pd.to_datetime("today").normalize()))
print (df)
       date1      date2 date3      date4
0        NaT 2019-01-26   NaT 2019-01-26
1 2021-04-13 2021-02-27   NaT 2021-04-13
2        NaT        NaT   NaT 2021-06-04
3        NaT        NaT   NaT 2021-06-04
4        NaT        NaT   NaT 2021-06-04

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM