Pandas将一列的值除以另一个数据框的值

0 投票
1 回答
538 浏览
提问于 2025-04-18 03:28

我有两个数据表,分别叫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

撰写回答