简体   繁体   English

熊猫根据其他两个具有日期时间值的列创建一个布尔列

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

I have the a df , 我有一个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

I want to create a boolean column on_time based on -3 <= date2 - date1 <= 0 , if any values in date1 or date2 is NaN or NaT , make on_time = False ; 我想基于-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

I am wondering if there is a better way to do it, more concise and efficient way. 我想知道是否有更好的方法,更简洁有效的方法。

IIUC, you can create a helper series with series.dt.days() and compare using s.ge() and le : 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)

Output 输出量

       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.

相关问题 这个 Numpy/Pandas 代码根据另外两个布尔列中的值构造新的布尔列有什么问题? - What is wrong with this Numpy/Pandas code to construct new boolean column based on the values in two other boolean columns? 如何基于布尔表达式和其他两个列的关系在pandas数据框中创建列 - How to create column in pandas dataframe based on boolean expression and relationship of two other columns Pandas - 是否可以根据其他列中的 boolean 值创建一个列,将它们视为变量? - Pandas - Is it possible to create a column based on boolean values in other columns treating these as variables? 如何根据其他列的 boolean 值在 pandas 中创建新列? - How to create a new column in pandas based off boolean values from other columns? Pandas 根据其他列的相等性创建 boolean 列 - Pandas create boolean column based on equality of other columns 使用熊猫基于其他两列中的值替换列中的值 - Replace values in column based on values in two other columns using pandas 嵌套np.where语句的替代方案,用于在基于其他两个现有列创建新的pandas布尔列时保留NaN值 - Alternative to nested np.where statements to retain NaN values while creating a new pandas boolean column based on two other existing columns pandas,根据其他两列的值创建一个新的唯一标识符列 - pandas, create a new unique identifier column based on values from two other columns 根据来自其他两列的条件文本值在 Pandas 中创建一个新列 - Create a new column in pandas based on conditional text values from two other columns 根据Pandas中其他两个列的相等性从列中提取值 - Extract values from a column based on the equality of two other columns in Pandas
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM