Python 熊猫将一列的条目除以另一数据帧的条目

Python 熊猫将一列的条目除以另一数据帧的条目,python,pandas,Python,Pandas,我有两个数据框-A和B。A包含各个商店、部门的每周销售数据,这些数据由一个键商店/部门日期(例如2\u 12\u 2010-04-03)索引,而B包含给定商店的相应消费者价格指数(CPI)和日期,例如2\u 2010-04-03 > A.columns > Out [ ] : Index([u'Store', u'Dept', u'Date', u'Weekly_Sales'], dtype='object') > B.columns > Out [ ] : I

我有两个数据框-A和B。A包含各个商店、部门的每周销售数据,这些数据由一个键
商店/部门日期
(例如
2\u 12\u 2010-04-03
)索引,而B包含给定商店的相应消费者价格指数(CPI)和日期,例如
2\u 2010-04-03

> A.columns  
> Out [ ] : Index([u'Store', u'Dept', u'Date', u'Weekly_Sales'], dtype='object')

> B.columns  
> Out [ ] : Index([u'Store', u'Date', u'CPI'], dtype='object')
我想通过将A中的每一行除以B中给出的相应CPI值来规范化A中给出的每周销售额

目前我正在尝试:

for ix,row in A.iterrows():
  f_index = str(row['Store']) + "_" + row['Date']
  A.ix[ix,'Weekly_Sales'] = row['Weekly_Sales']/ B.ix[f_index,'CPI']

A包含421570行。我的程序需要很长时间才能运行。正确有效的方法是什么

DataFrames'merge方法应该更快,即使它复制数据。您可以设置标志
copy=False
,以最小化不必要的复制

如果B中的每个日期对应A中的一个日期,则您可以执行以下操作:

C = A.merge(B, on=['Store', 'Date'], copy=False)
C['Normalized_Sales'] = C.Weekly_Sales / C.CPI

A.set_索引(['Store',Date'])['Weekly_Sales']/B.set_索引(['Store',Date'])['CPI']
。如果始终对
A
B
进行索引,则此方法效果最佳,因为索引也将有助于其他操作。如问题所述,数据帧A和B已在不同的键上进行索引。为什么我的程序这么慢?@slushy给出的解决方案效果很好。