根据日期列差异过滤熊猫数据框

时间:2021-06-01 14:42:57

标签: python pandas datetime

根据两个日期列之间的差异过滤 Pandas 数据框的最有效方法是什么?

例如,基于以下数据帧:

   CADASTRO    RESPOSTA      EVAL 
0  2021-06-01  2021-06-13    y
1  2021-06-01  2021-06-13    y
2  2021-06-01  2021-06-18    y
3  2021-06-01  2021-06-09    n
4  2021-06-01  2021-06-20    n
5  2021-06-01  2021-06-20    n

如何过滤它以仅包含列 RESPOSTACADASTRO 之间的差异小于 15 天的记录?我尝试了以下方法,但没有成功:

import datetime
filtered_df = df[(df.RESPOSTA - df.CADASTRO).days < 15]

所需的输出是:

   CADASTRO    RESPOSTA      EVAL
0  2021-06-01  2021-06-13    y
1  2021-06-01  2021-06-13    y
3  2021-06-01  2021-06-09    n

2 个答案:

答案 0 :(得分:3)

通过日期时间访问器 dt

访问天数
# Ensure DateTime
df['CADASTRO'] = pd.to_datetime(df['CADASTRO'])
df['RESPOSTA'] = pd.to_datetime(df['RESPOSTA'])
# Access Days through dt.days
filtered_df = df[(df.RESPOSTA - df.CADASTRO).dt.days < 15]

filtered_df

    CADASTRO   RESPOSTA EVAL
0 2021-06-01 2021-06-13    y
1 2021-06-01 2021-06-13    y
3 2021-06-01 2021-06-09    n

答案 1 :(得分:1)

使用timedelta比较天差

from datetime import timedelta

df = pd.DataFrame({
    'CADASTRO': ['2021-06-01', '2021-06-01', '2021-06-01', '2021-06-01', '2021-06-01', '2021-06-01'], 
    'RESPOSTA': ['2021-06-13', '2021-06-13', '2021-06-18', '2021-06-09', '2021-06-20', '2021-06-20'],
    'EVAL': ['y', 'y', 'y', 'n', 'n', 'n']
})

df['CADASTRO'] = pd.to_datetime(df['CADASTRO'])
df['RESPOSTA'] = pd.to_datetime(df['RESPOSTA'])
df['temp'] = df['RESPOSTA'] - df['CADASTRO']
df['temp'] = df['temp'].apply(lambda x: 0 if x < timedelta(days=15) else 1)
filtered_df = df.drop(df[df['temp']==0].index).drop(columns=['temp'])

输出filtered_df

enter image description here