簡體   English   中英

熊貓根據其他兩個具有日期時間值的列創建一個布爾列

[英]pandas create a boolean column based on two other columns with datetime values

我有一個df

date1        date2
2019-05-31   2019-06-01
NaT          NaN
2018-07-01   2018-08-01
NaT          2019-06-03
2019-01-01   NaN

我想基於-3 <= date2 - date1 <= 0創建一個布爾列on_time ,如果date1date2任何值為NaNNaT ,則使on_time = False ;

    a = df['date1'].isna()
    b = df['date2'].isna()

    df['on_time'] = (a | b)

    m = (-3 <= (df.loc[~a&~b, 'date1'] - df.loc[~a&~b, 'date2']).dt.days) & \
        ((df.loc[~a&~b, 'date1'] - df.loc[~a&~b, 'date2']).dt.days <= 0)

    df['on_time'] = m

我想知道是否有更好的方法,更簡潔有效的方法。

IIUC,您可以使用series.dt.days()創建一個幫助器系列,並使用s.ge()le進行比較:

s=(df.date2-df.date1).dt.days
df=df.assign(on_time=s.ge(-3)&s.le(0))

       date1      date2  on_time
0 2019-05-31 2019-06-01    False
1        NaT        NaT    False
2 2018-07-01 2018-08-01    False
3        NaT 2019-06-03    False
4 2019-01-01        NaT    False
## if the dates are of type str
df['date1'] = pd.to_datetime(df['date1'])
df['date2'] = pd.to_datetime(df['date2'])


(df['date2'] - df['date1']).apply(lambda x: True if -3<= x.days <=0   else False)

輸出量

       date1      date2  on_time
0 2019-05-31 2019-06-01    False
1        NaT        NaT    False
2 2018-07-01 2018-08-01    False
3        NaT 2019-06-03    False
4 2019-01-01        NaT    False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM