创建平衡面板数据集

Creating a balanced panel dataset

我有一个数据集

id  year      sales
1    2000      10
2    2000      10
2    2001      20
2    2002      30

我想创建一个平衡面板,以便获得以下内容:

id  year      sales
1    2000      10
1    2001      NA
1    2002      NA
2    2000      10
2    2001      20
2    2002      30

我尝试了以下代码:

df_balanced = (df.set_index('year',append=True).reindex(pd.MultiIndex.from_product([df.index.unique(),range(df.year.min(),df.year.max()+1)],names['id','year'])).reset_index(level=1))

但是我没有得到想要的输出。

idx = pd.MultiIndex.from_product(
    [df.id.unique(), df.year.unique()], names=["id", "year"]
)
df = df.set_index(["id", "year"]).reindex(idx).reset_index()
print(df)

打印:

   id  year  sales
0   1  2000   10.0
1   1  2001    NaN
2   1  2002    NaN
3   2  2000   10.0
4   2  2001   20.0
5   2  2002   30.0