Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何有条件地从数据帧中的多个datetime列中选择第一个非空日期?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何有条件地从数据帧中的多个datetime列中选择第一个非空日期?

Python 如何有条件地从数据帧中的多个datetime列中选择第一个非空日期?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有多个datetime列的pandas数据框架。我想创建一个新列,选择第一列、第二列或第三列中分别不为null的日期第一个日期。如果这三列中都没有日期,则设置为今天 我的数据库的一个例子是: date1 date2 date3 0 NaT 2019-01-26 NaT 1 2021-04-13 2021-02-27 NaT 2 NaT NaT NaT 3

我有一个带有多个datetime列的pandas数据框架。我想创建一个新列,选择第一列、第二列或第三列中分别不为null的日期第一个日期。如果这三列中都没有日期,则设置为今天

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

           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
我想创建一个新列date 4,其中第一个日期不是从date 1到date 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:DatetimeArray和DatetimeArray的操作数类型不受支持
思想是为所选列重新填充缺失的值,然后按位置选择第一列,并按今天的
重新填充缺失的值

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

嘿,耶斯雷尔,成功了!非常感谢你!