[英]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.