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