python - 按月份和日期Python比较两个日期

标签 python pandas loops date

我有两列日期需要比较,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')}

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

def eligible(date1,dob):
  if date1.month - dob.month==0 and date1.day <= dob.day:
    return 'Y'
  elif date1.month - dob.month==1 and date1.day > dob.day:
    return 'Y'
  else:
    return 'N'

我想将此函数应用于超过 5M 行的原始 df,因此 for 循环效率不高,有什么办法可以实现吗?

数据类型是date,不是datetime

最佳答案

我想你需要numpy.where条件由 |()链接:

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

关于python - 按月份和日期Python比较两个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46110242/

相关文章:

python - 为什么我收到 TypeError : dtype datetime64[ns] cannot be converted to timedelta64[ns]?

javascript - 在 Javascript 循环中将数组中的值分配给三个不同的数组?

java - 斐波那契方法返回序列中的第 n 个数字

python - 如何在keras中记录每批处理的val_loss和loss

python - 从字典中删除重复值而不删除键

python - 根据列的最大值删除 Pandas 数据框行

java - 非常简单的素数测试——我想我不理解 for 循环

Python:使用 subprocess.Popen 执行长时间运行的进程,杀死它并访问其输出

python - Google 应用引擎键值错误

python - Pandas 仅从数据框中选择数字或整数字段