Python在timeseries数据帧中填充零

Python在timeseries数据帧中填充零,python,pandas,time-series,Python,Pandas,Time Series,我有一个日期列表和一个数据框。现在,dataframe有一个id列和其他值,这些值对于所有日期都不一致。我想在没有数据的ID和日期的所有列中填入零。让我举例说明: date id clicks conv rev 2019-01-21 234 34 1 10 2019-01-21 235 32 0 0 2019-01-24 234 56 2 20 20

我有一个日期列表和一个数据框。现在,dataframe有一个id列和其他值,这些值对于所有日期都不一致。我想在没有数据的ID和日期的所有列中填入零。让我举例说明:

    date     id     clicks    conv    rev
  2019-01-21 234      34        1     10
  2019-01-21 235      32        0     0
  2019-01-24 234      56        2     20
  2019-01-23 235      23        3     30
日期列表如下所示:

    [2019-01-01, 2019-01-02,2019-01-03 ....2019-02-28]
我想要的是为所有ID的数据框中所有缺失的日期添加零。因此,生成的df应该如下所示:

    date     id     clicks    conv    rev
  2019-01-01 234      0         0     0
  2019-01-01 235      0         0     0
     .                .         .     .
     .                .         .     .

  2019-01-21 234      34        1     10
  2019-01-21 235      32        0     0
  2019-01-22 234      0         0     0
  2019-01-22 235      0         0     0
  2019-01-23 234      0         0     0
  2019-01-23 235      0         0     0
  2019-01-24 234      56        2     20
  2019-01-23 235      23        3     30
      .               .         .      .
  2019-02-28  0       0         0      0

使用笛卡尔值积的
设置索引
+
重新索引
。在这里,我将使用
pd.date\u range
创建日期,以保存一些键入内容,并确保日期为
datetime

import pandas as pd

df['date'] = pd.to_datetime(df.date)
my_dates = pd.date_range('2019-01-01', '2019-02-28', freq='D')

idx = pd.MultiIndex.from_product([my_dates, df.id.unique()], names=['date', 'id'])
df = df.set_index(['date', 'id']).reindex(idx).fillna(0).reset_index()
输出:
df

异常:无法处理非唯一的多索引!我明白了error@Nofy然后,原始数据帧有多行,其中同一ID多次列出同一日期。这是预期的吗?如果是,您希望如何处理这些重复的行?是的,这是正确的。我处理好了,现在开始工作了。我刚刚收到这样的警告:SettingWithCopyWarning:试图在数据帧中的切片副本上设置一个值。尝试使用.loc[row\u indexer,col\u indexer]=valueinstead@Nofy是的,这可能与这个问题无关。如果执行了
.drop\u duplicates()
操作,请在末尾添加
.copy()
,因为删除重复项会返回一个视图。否则,您可以在执行此操作之前执行
df=df.copy()
,以删除警告。关于这一警告,这篇文章非常有用:
          date     id  clicks  conv   rev
0   2019-01-01    234     0.0   0.0   0.0
1   2019-01-01    235     0.0   0.0   0.0
...
45  2019-01-23    235    23.0   3.0  30.0
46  2019-01-24    234    56.0   2.0  20.0
47  2019-01-24    235     0.0   0.0   0.0
...
115 2019-02-27    235     0.0   0.0   0.0
116 2019-02-28    234     0.0   0.0   0.0
117 2019-02-28    235     0.0   0.0   0.0