2015-08-14 73 views
1

DataFrame1:填充數據幀的行值大熊貓

Device MedDescription Quantity 

RWCLD Acetaminophen (TYLENOL) 325 mg Tab 54 
RWCLD Ampicillin Inj (AMPICILLIN) 2 g Each 13 
RWCLD Betamethasone Inj *5mL* (CELESTONE SOLUSPAN) 30 mg (5 mL) Each 2 
RWCLD Calcium Carbonate Chew (500mg) (TUMS) 200 mg Tab 17 
RWCLD Carboprost Inj *1mL* (HEMABATE) 250 mcg (1 mL) Each 5 
RWCLD Chlorhexidine Gluc Liq *UD* (PERIDEX/PERIOGARD) 0.12 % (15 mL) Each 5 

數據式2:

Device DrwSubDrwPkt MedDescription BrandName MedID PISAlternateID CurrentQuantity Min Max StandardStock ActiveOrders DaysUnused 

RWC-LD RWC-LD_MAIN Drw 1-Pkt 12 Mag/AlOH/Smc 200-200-20/5 *UD* (MYLANTA/MAALOX) (30 mL) Each MYLANTA/MAALOX A03518 27593 7 4 10 N Y 3 
RWC-LD RWC-LD_MAIN Drw 1-Pkt 20 ceFAZolin in Dextrose(ISO-OS) (ANCEF/KEFZOL) 1 g (50 mL) Each ANCEF/KEFZOL A00984 17124 6 5 8 N N 2 
RWC-LD RWC-LD_MAIN Drw 1-Pkt 22 Clindamycin Phosphate/D5W (CLEOCIN) 900 mg (50 mL) IV Premix CLEOCIN A02419 19050 7 6 8 N N 2 

我想要做的就是DataFrame2值追加到數據幀1只有在' MedDescription'匹配。當它找到了比賽,我想從dataFrame2 [最小值,最大值,天未使用]這些都是整數

我有一個反覆的解決方案,我訪問數據幀1名對象1行的時間和只添加某些列然後檢查與數據幀2的匹配,一旦發現我將列號從那裏附加到原始數據幀。

有沒有更好的方法?它讓我的電腦慢慢爬行,因爲我有成千上萬的行。

回答

1

聽起來好像你想基於匹配的「MedDescription」將目標列('MedDescription','Min','Max','Days Unused')合併到df1。

我認爲要做到這一點的最好辦法是:

target_cols = ['MedDescription', 'Min', 'Max', 'Days Unused'] 
df1.merge(df2[target_cols], on='MedDescription', how='left') 

如何=「左」確保了df1所有數據返回,只有在DF2目標列追加如果MedDescription匹配。

注意:如果複製DF1/df2.to_dict的結果,這是對他人更容易()。上面的數據很難解析。

+0

我試過了,它工作了,但它將索引從UNIT本身改成了數字 – user3866172

0

這聽起來像是一個使用Pandas'built-in functions for joining datasets的機會 - 您應該可以加入MedDescription並加入來自DataFrame2的所需列。 Pandas中的join函數非常高效,應遠遠超越循環遍歷的方法。

熊貓有documentation on merging datasets,其中包括一些很好的例子,你可以找到關於SQL教程中的連接概念的充足文獻。

+0

是啊我看了一下那個文檔,但是它的值是基於索引合併的,不幸的是我的數據框有一個固定的索引(設備名稱),是否有可能有2個索引? – user3866172

+0

得到它的工作'pd.merge(ld,ldAc,on ='MedDescription',how ='outer')' – user3866172

0
pd.merge(ld,ldAc,on='MedDescription',how='outer') 

這是我用來加入2個數據幀的方式,它似乎工作,雖然它刪除了其中包含設備的索引之一。