猿问

用三重索引填充数据框中的日期

我知道已经提出了一个与此类似的问题,但是当您只有一个分类变量时,该解决方案有效。我有其中的两个,而且MultiIndexes对我来说一直很难与之合作。问题是,我有以下数据框:


 Date        Product    eCommerce   Sales

12-10-2018      A           1        10

12-12-2018      A           0        7

12-13-2018      A           1        4

12-15-2018      A           1        2

12-15-2018      A           0        2

12-11-2018      B           1        8

12-13-2018      B           1        6

所以我需要知道每个日期有和没有电子商务的销售额,并填写没有出现零销售额的日期。我想要的输出是:


 Date        Product    eCommerce   Sales

12-10-2018      A           1        10

12-11-2018      A           1        0

12-12-2018      A           1        0

12-13-2018      A           1        4

12-14-2018      A           1        0

12-15-2018      A           1        2


12-12-2018      A           0        7

12-13-2018      A           0        0

12-14-2018      A           0        0

12-15-2018      A           0        2


12-11-2018      B           1        8

12-12-2018      B           1        0

12-13-2018      B           1        6

注意:它只是一个 DataFrame,我只是添加了空格来区分索引。


因此,在原始数据帧中,产品 A 的电子商务销售缺少 12-11 和 12-14,产品 A 的非电子商务销售缺少 12-13 和 12-14,产品 B 的电子商务销售缺少 12-12


问题是,我设法通过一个非常低效的循环实现了我想要的,这个循环需要大约 25 分钟才能运行:


df_full= pd.DataFrame(columns=df.columns)

for sku in df['Product'].unique():


    aux=df.loc[df['Product']==sku]

    dates= pd.DataFrame(pd.date_range(start=aux.Date.min(), end=aux.Date.max(),freq='D'),columns=['Date'])


    df3 = df.loc[df['id_prod']==sku].merge(dates,

                                                   how='outer',left_on='Date',

                                                   right_on='Date').sort_values(by='Date')


    df3.fillna(method='ffill',inplace=True)

    df_full= df_full.append(df3)

我非常有信心我可以以矢量化的方式做到这一点,这应该花费更少的时间(我有 290 个可能日期的 2,300 个产品)。你知道我怎样才能做到这一点吗?


编辑:添加了粗体文本,更好地解释了问题


芜湖不芜
浏览 137回答 1
1回答
随时随地看视频慕课网APP

相关分类

Python
我要回答