注意:我很难说出我的问题的标题,因此,如果您能想到更好的方法来帮助其他有类似问题的人,请告诉我,我将对其进行更改。 / 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
本质上,我想为week
和site
的所有唯一组合创建行。如果原始数据没有vol
组合的week-site
,则它将得到0
。
答案 0 :(得分:5)
将stack
与unstack
一起使用
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)
您可以使用crosstab
和stack
:
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