为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

芜湖不芜 2021-10-19 16:37:05
我知道已经提出了一个与此类似的问题,但是当您只有一个分类变量时,该解决方案有效。我有其中的两个,而且MultiIndexes对我来说一直很难与之合作。问题是,我有以下数据框: Date        Product    eCommerce   Sales12-10-2018      A           1        1012-12-2018      A           0        712-13-2018      A           1        412-15-2018      A           1        212-15-2018      A           0        212-11-2018      B           1        812-13-2018      B           1        6所以我需要知道每个日期有和没有电子商务的销售额,并填写没有出现零销售额的日期。我想要的输出是: Date        Product    eCommerce   Sales12-10-2018      A           1        1012-11-2018      A           1        012-12-2018      A           1        012-13-2018      A           1        412-14-2018      A           1        012-15-2018      A           1        212-12-2018      A           0        712-13-2018      A           0        012-14-2018      A           0        012-15-2018      A           0        212-11-2018      B           1        812-12-2018      B           1        012-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 个产品)。你知道我怎样才能做到这一点吗?编辑:添加了粗体文本,更好地解释了问题
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信