按月比较两个日期和日期Python

2024-06-10 22:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两列日期需要比较,date1是某个日期的列表,date2是随机日期(dob)。我需要根据某些条件比较月份和日期来做一个旗子。同类样品:

df_sample = DataFrame({'date1':('2015-01-15','2015-01-15','2015-03-15','2015-04-15','2015-05-15'),
                       'dob':('1999-01-25','1987-12-12','1965-03-02','2000-08-02','1992-05-15')}

我根据下面的条件创建一个函数

^{pr2}$

我想把这个函数应用到超过5米行的原始数据流上,因此for循环不是效率,有什么方法可以实现这一点吗?在

数据类型是date,而不是datetime


Tags: sample函数dataframedf列表原始数据样品条件
2条回答

使用datetime当然是有益的:

df_sample['dob'] = pd.to_datetime(df_sample['dob'])
df_sample['date1'] = pd.to_datetime(df_sample['date1'])

一旦你有了它,你的公式就可以直接应用到所有行:

^{pr2}$

结果是boolean(True/False),但是如果需要,可以很容易地将其转换为“Y”/“N”。在

我认为您需要^{},条件由|or)链接:

df_sample['date1'] = pd.to_datetime(df_sample['date1'])
df_sample['dob'] = pd.to_datetime(df_sample['dob'])

months_diff = df_sample.date1.dt.month  - df_sample.dob.dt.month
days_date1 = df_sample.date1.dt.day
days_dob = df_sample.dob.dt.day

m1 = (months_diff==0) & (days_date1 <= days_dob)
m2 = (months_diff==1) & (days_date1 > days_dob)

df_sample['out'] = np.where(m1 | m2 ,'Y','N')
print (df_sample)
       date1        dob out
0 2015-01-15 1999-01-25   Y
1 2015-01-15 1987-12-12   N
2 2015-03-15 1965-03-02   N
3 2015-04-15 2000-08-02   N
4 2015-05-15 1992-05-15   Y

相关问题 更多 >