Pandas将一列的值除以另一个数据框的值
我有两个数据表,分别叫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表里的每周销售数据进行标准化,也就是说,我想用A表每一行的数据去除以B表中对应的CPI值。
目前我正在尝试这样做:
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行数据。我的程序运行得非常慢,根本等不及。请问有什么更正确和高效的方法吗?
1 个回答
1
DataFrame的merge方法应该会更快,尽管它会复制数据。你可以把标志设置为copy=False
,这样可以减少不必要的数据复制。
如果在B中每个日期都有对应的A中的日期,那么你可以这样做:
C = A.merge(B, on=['Store', 'Date'], copy=False)
C['Normalized_Sales'] = C.Weekly_Sales / C.CPI