2015-08-14 60 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个数据帧的方式,它似乎工作,虽然它删除了其中包含设备的索引之一。