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

时间:2018-06-27 19:42:29

标签: python pandas

注意:我很难说出我的问题的标题,因此,如果您能想到更好的方法来帮助其他有类似问题的人,请告诉我,我将对其进行更改。 / p>

当前数据

存储为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

请注意,网站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

本质上,我想为weeksite的所有唯一组合创建行。如果原始数据没有vol组合的week-site,则它将得到0

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您可以使用crosstabstack

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