Python 熊猫:为列的每个唯一值创建行,即使缺少数据

Python 熊猫:为列的每个唯一值创建行,即使缺少数据,python,pandas,Python,Pandas,注意:我的问题标题的措辞有困难,所以如果你能想出更好的方法来帮助其他有类似问题的人,请让我知道,我会更改它 当前数据 存储为数据帧 print(df) week | site | vol 1 | a | 10 2 | a | 11 3 | a | 2 1 | b | 55 2 | b | 1 1 | c | 69 2 | c | 66 3 | c | 23 注意站点b没有第3周的数据 目标 基本上

注意:我的问题标题的措辞有困难,所以如果你能想出更好的方法来帮助其他有类似问题的人,请让我知道,我会更改它

当前数据 存储为数据帧

print(df)

week | site | vol
1    | a    | 10
2    | a    | 11
3    | a    | 2
1    | b    | 55
2    | b    | 1
1    | c    | 69
2    | c    | 66
3    | c    | 23
注意站点b没有第3周的数据

目标
基本上,我想为
week
site
的所有独特组合创建行。如果原始数据没有一个
week站点的
vol
组合,那么它将使用
堆栈
取消堆栈

df.set_index(['week','site']).unstack('week',fill_value=0).stack().reset_index()
Out[424]: 
  site  week  vol
0    a     1   10
1    a     2   11
2    a     3    2
3    b     1   55
4    b     2    1
5    b     3    0
6    c     1   69
7    c     2   66
8    c     3   23

您可以使用
交叉表
堆栈

pd.crosstab(df.site,df.week,df.vol, aggfunc='first').fillna(0).stack().reset_index(name='vol')
输出:

  site  week   vol
0    a     1  10.0
1    a     2  11.0
2    a     3   2.0
3    b     1  55.0
4    b     2   1.0
5    b     3   0.0
6    c     1  69.0
7    c     2  66.0
8    c     3  23.0

谢谢!我不知道这一系列方法是如何工作的,所以我有一些研究要做,但解决方案是有效的。@NLR Yw:-)快乐编码
  site  week   vol
0    a     1  10.0
1    a     2  11.0
2    a     3   2.0
3    b     1  55.0
4    b     2   1.0
5    b     3   0.0
6    c     1  69.0
7    c     2  66.0
8    c     3  23.0