根据另一个数据帧行的值pandas填充DataFrame行值

时间:2015-08-14 22:19:19

标签: python pandas

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

如果'MedDescription'匹配,我想要做的是将DataFrame2值附加到数据帧1。当它找到匹配时,我想只添加dataFrame2 [Min,Max,Days Unused]中的某些列,这些列都是整数

我有一个迭代解决方案,我一次访问数据帧1对象1行,然后检查与数据帧2的匹配,找到后我将那里的列号附加到原始dataFrame。

有更好的方法吗?它使我的计算机慢慢爬行,因为我有成千上万行。

2 个答案:

答案 0 :(得分:1)

听起来您想要合并目标列(' MedDescription',' Min',' Max',' Days Unused' )df1基于匹配的' MedDescription'。

我认为最好的方法如下:

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

如何='左'确保返回df1中的所有数据,并且如果MedDescription匹配,则仅追加df2中的目标列。

注意:如果复制df1 / df2.to_dict()的结果,其他人会更容易。上面的数据很难解析。

答案 1 :(得分:0)

这听起来像是使用Pandas built-in functions for joining datasets的机会 - 您应该可以使用DataFrame2中的所需列加入MedDescription。 Pandas中的join函数非常有效,并且应该远远超过您的循环方法。

Pandas有documentation on merging datasets包含一些很好的例子,你可以在SQL教程中找到关于连接概念的大量文献。