我有2个数据框--A和B. A包含各个商店的每周销售数据,部门由关键Store_Dept_Date
索引(例如2_12_2010-04-03
),而B包含相应的消费者价格指数(CPI)对于给定的商店和日期索引为Store_Date
例如2_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行。我的程序需要永远运行。什么是正确有效的方式?
答案 0 :(得分:1)
DataFrames'即使复制数据,合并方法也应该更快。您可以设置标记copy=False
以最大限度地减少不必要的复制。
如果A中的每个日期在B中都有一个日期,那么您可以这样做:
C = A.merge(B, on=['Store', 'Date'], copy=False)
C['Normalized_Sales'] = C.Weekly_Sales / C.CPI