我有兩個資料框 A 和 B,它們包含不同的患者資料集,并且需要將某些列從 B 附加到 A - 但是僅適用于包含來自同一患者和訪問的資訊的那些行,即 A 和 B 具有匹配值在兩個特定的列中。B 比 A 長,并不是 A 中的所有行都包含在 B 中。我不知道如果沒有回圈這怎么可能,但是很多人不鼓勵回圈遍歷 pandas 資料幀(除了我的回圈解決方案不起作用的事實因為“只能比較標記相同的 Series 物件”)。我在這里閱讀了選項 How to iterate over rows in a DataFrame in Pandas 但看不到我可以在此處應用哪個選項,希望得到任何提示!
玩具示例(實際資料框大約有 300 行):
dict_A = {
'ID': ['A_190792','X_210392','B_050490','F_311291','K_010989'],
'Visit_Date': ['2010-10-31','2011-09-24','2010-30-01','2012-01-01','2013-08-13'],
'Score': [30, 23, 42, 23, 31],
}
A = pd.DataFrame(dict_A)
dict_B = {
'ID': ['G_090891','A_190792','Z_060791','X_210392','B_050490','F_311291','K_010989','F_230989'],
'Visit_Date': ['2013-03-01','2010-10-31','2013-04-03','2011-09-24','2010-30-01','2012-01-01','2013-08-13','2014-09-09'],
'Diagnosis': ['F12', 'G42', 'F34', 'F90', 'G98','G87','F23','G42'],
}
B = pd.DataFrame(dict_B)
for idx, row in A.iterrows():
A.loc[row,'Diagnosis'] = B['Diagnosis'][(B['Visit_Date']==A['Visit_Date']) & (B['ID']==A['ID'])]
# Appends Diagnosis column from B to A for rows where ID and date match
我已經看到這個問題Append Columns to Dataframe 1 Based on Matching Column Values in Dataframe 2但唯一的答案是非常具體的,也沒有解決是否可以/應該使用回圈的問題
uj5u.com熱心網友回復:
我想你可以使用合并:
A['Visit_Date']=pd.to_datetime(A['Visit_Date'])
B['Visit_Date']=pd.to_datetime(B['Visit_Date'])
final=A.merge(B,on=['Visit_Date','ID'],how='outer')
print(final)
'''
ID Visit_Date Score Diagnosis
0 A_190792 2010-10-31 30.0 G42
1 X_210392 2011-09-24 23.0 F90
2 B_050490 2010-30-01 42.0 G98
3 F_311291 2012-01-01 23.0 G87
4 K_010989 2013-08-13 31.0 F23
5 G_090891 2013-03-01 NaN F12
6 Z_060791 2013-04-03 NaN F34
7 F_230989 2014-09-09 NaN G42
'''
如果你只想答:
A['Visit_Date']=pd.to_datetime(A['Visit_Date'])
B['Visit_Date']=pd.to_datetime(B['Visit_Date'])
final=A.merge(B,on=['Visit_Date','ID'],how='left')
print(final)
'''
ID Visit_Date Score Diagnosis
0 A_190792 2010-10-31 30 G42
1 X_210392 2011-09-24 23 F90
2 B_050490 2010-30-01 42 G98
3 F_311291 2012-01-01 23 G87
4 K_010989 2013-08-13 31 F23
'''
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533848.html
