2016-08-08 16 views
0

臨床データを分析し、別のデータフレームの情報に基づいて1つのデータフレームの情報をフィルタリングしようとしています。パンダ:複数のデータフレームの情報に基づいたデータのフィルタリング

データフレームリストの一つは、患者が治療

dfTreatments = pd.DataFrame({'PatientID': [4,4,4,9,9,9,11,11,11], 'TreatmentDate': ['2016-01-01', '2016-01-15', '2016-03-25','2016-01-01','2016-01-15','2016-01-29','2016-01-01','2016-03-15','2016-03-25']}) 
dfTreatments['TreatmentDate'] = pd.to_datetime(dfTreatments['TreatmentDate']) 

    PatientID TreatmentDate 
0   4 2016-01-01 
1   4 2016-01-15 
2   4 2016-03-25 
3   9 2016-01-01 
4   9 2016-01-15 
5   9 2016-01-29 
6   11 2016-01-01 
7   11 2016-03-15 
8   11 2016-03-25 

や他のデータフレームリストの中に来るという日付は、患者が合併症で病院を訪れることにさかのぼります。私たちの研究では

dfHospitalVisits = pd.DataFrame({'PatientID': [4,4,9,11], 'HospitalVisitDate': ['2016-01-14','2016-03-10','2016-01-28','2016-01-03']}) 
dfHospitalVisits['HospitalVisitDate'] = pd.to_datetime(dfHospitalVisits['HospitalVisitDate']) 

    HospitalVisitDate PatientID 
0  2016-01-14   4 
1  2016-03-10   4 
2  2016-01-28   9 
3  2016-01-03   11 

、私たちは、患者は20日の治療を受けていない場合は、当社の分析から通院を除外したいです。我々はの20日の隙間の前の最後の治療でそれらを除外し始める。例:2016年1月15日以降の患者4の病院訪問は除外します。

この例では、患者4の第二病院訪問患者11の病院訪問がdfHospitalVisitsから除去されます。

編集:@Merlin、これまでのところ、私はdfTreatments.groupby('PatientID')['TreatmentDate'].diff()を使用して、治療日のギャップを患者別に分類しました。私が立ち往生している部分は、dfHospitalVisitsの値を除外するために治療日数の差を20を超える方法を使用する方法がわからないということです。

+1

あなたがしようとしているものをご提示ください。 – Merlin

+0

これはアイデアのために見てください。 http://chrisalbon.com/python/pandas_join_merge_dataframe.html – Merlin

+0

提供されているリンクを確認する必要があります。 SOはコーディングサービスではありません – Merlin

答えて

0

私は次のことをお勧め:

# Make a sorted dataframe to calculate the time gap before the next treatment 
dfTreatments_sorted = dfTreatments.sort_values(['PatientID','TreatmentDate'], ascending=False) 

# Calculate the time gap before the next treatment 
df_diff = dfTreatments_sorted.groupby('PatientID').TreatmentDate.diff(periods=1).rename('Gap_before_next_treatment') 

# Add the time gaps as a new column to your existing dfTreatments dataframe 
dfTreatments = pd.concat([dfTreatments, -df_diff], axis=1, join='inner').sort_index() 

# Join dfTreatments and dfHospitalVisits into new dataframe (df) 
df = dfHospitalVisits.set_index('PatientID').join(dfTreatments.set_index('PatientID')) 

# Select combination where TreatmentDate is before corresponding HospitalVisitDate 
df = df[(df.HospitalVisitDate>df.TreatmentDate)] 

# The TreatmentDate that is important is latest before the HospitalVisitDate 
df = df.reset_index().groupby(['PatientID','HospitalVisitDate']).max() 

# Now you can filter hospital visits given the calculated time gap 
df = df[df.Gap_before_next_treatment<'20 days'].reset_index()[['PatientID','HospitalVisitDate']] 
関連する問題