Pandas:为列的每个唯一值创建行,即使缺少数据也是如此

NLR*_*NLR 0 python pandas

注意:我的问题标题有问题,所以如果你能想出更好的东西来帮助其他有类似问题的人,请告诉我,我会改变它.

当前数据

存储为Pandas DataFrame

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
Run Code Online (Sandbox Code Playgroud)

请注意,站点b没有第3周的数据

目标

week | site | vol
1    | a    | 10
2    | a    | 11
3    | a    | 2
1    | b    | 55
2    | b    | 1
3    | b    | 0
1    | c    | 69
2    | c    | 66
3    | c    | 23
Run Code Online (Sandbox Code Playgroud)

从本质上讲,我希望所有的独特组合,创建行weeksite.如果原始数据没有vol用于week-site组合,那么它得到一个0.

WeN*_*Ben 5

使用stackunstack

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
Run Code Online (Sandbox Code Playgroud)