Pandas-具有日期范围的条件信息检索

Pandas-具有日期范围的条件信息检索,pandas,numpy,data-management,Pandas,Numpy,Data Management,我对熊猫还相当陌生,我为完成一项看似简单的任务而写的剧本似乎不必要地复杂。如果你们知道一个更简单的方法来实现这一点,我将不胜感激 任务: 我讨厌两个电子表格(df1和df2),每个都有一个标识符(mrn)和一个日期。如果满足以下条件,我的任务是从df2中为df1中的每一行检索一个值: df1中给定行的标识符存在于df2中 如果上述为真,则如果相关日期在df1中日期的+/-5天范围内,则检索df2中的值 我编写了以下代码来实现这一点: #%%housekeeping import numpy as

我对熊猫还相当陌生,我为完成一项看似简单的任务而写的剧本似乎不必要地复杂。如果你们知道一个更简单的方法来实现这一点,我将不胜感激

任务: 我讨厌两个电子表格(df1和df2),每个都有一个标识符(mrn)和一个日期。如果满足以下条件,我的任务是从df2中为df1中的每一行检索一个值:

df1中给定行的标识符存在于df2中

如果上述为真,则如果相关日期在df1中日期的+/-5天范围内,则检索df2中的值

我编写了以下代码来实现这一点:

#%%housekeeping
import numpy as np
import pandas as pd
import csv
import datetime
from datetime import datetime, timedelta 
import sys
from io import StringIO

#%%dataframe import
df1=',mrn,date,foo\n0,1,2015-03-06,n/a\n1,11,2009-08-14,n/a\n2,14,2009-05-18,n/a\n3,20,2010-06-19,n/a\n'
df2=',mrn,collection Date,Report\n0,1,2015-03-06,report to import1\n1,11,2009-08-12,report to import11\n2,14,2009-05-21,report to import14\n3,20,2010-06-25,report to import20\n'

df1 = pd.read_csv(StringIO(df1))
df2 = pd.read_csv(StringIO(df2))


#converting to date-time format
df1['date']=pd.to_datetime(df1['date'])
df2['collection Date']=pd.to_datetime(df2['collection Date'])

#%%mask()   
def mask(df2, rangeTime):
    mask= (df2> rangeTime -timedelta(days=5)) & (df2 <= rangeTime + timedelta(days=5))
    return mask

#%% detailLoop()
i=0
for element in df1["mrn"]:
    df1DateIter = df1.ix[i, 'date']
    df2MRNmatch= df2.loc[df2['mrn']==element, ['collection Date', 'Report']]
    df2Date= df2MRNmatch['collection Date']
    df2Report= df2MRNmatch['Report']
    maskOut= mask(df2Date, df1DateIter)
    dateBoolean= maskOut.iloc[0]
    if dateBoolean==True: 
        df1.ix[i, 'foo'] = df2Report.iloc[0]      
    i+=1

是否可以发布示例数据(输入、预期结果)?使用示例数据和已完成的测试用例进行更新。您的代码正在尝试读取两个csv文件,但您的示例数据已发布为格式化数据帧。那是哪一个呢?建议您阅读如何操作,其中包括创建一个示例。我修改了我的代码,以便您能够将其复制并粘贴到python环境中并运行。请注意,脚本确实覆盖原始数据帧,因此如果连续运行所有代码,df1将反映数据检索,而不是初始化的数据帧。我对stack overflow还是个新手,所以我真的很欣赏这些建设性的批评,并乐于听取我如何更好地提问!
Out[824]: 

   mrn       date                 foo
0    1 2015-03-06   report to import1
1   11 2009-08-14  report to import11
2   14 2009-05-18  report to import14
3   20 2010-06-19                 NaN