我正在学习数据框架,并且正在研究动物观察的各种属性。我创建了一个数据框,计算这些动物的出现次数:
>>> df
Type Count
date
2015-07-11 Dog 2
2015-07-11 Cat 1
2015-07-12 Cat 2
2015-07-13 Pig 1
在没有出现动物的日子里,我希望计数为0.我想要的数据框应该是这样的:
>>> df
Type Count
date
2015-07-11 Dog 2
2015-07-11 Cat 1
2015-07-11 Pig 0
2015-07-12 Dog 0
2015-07-12 Cat 2
2015-07-12 Pig 0
2015-07-13 Dog 0
2015-07-13 Cat 0
2015-07-13 Pig 1
注意:我知道Type的所有值,即Cat, Dog, Pig
。
我完全不知道如何将这些额外的行添加到DataFrame中。这可能是一个非常愚蠢的问题,关于如何追加具有特定索引的行。
任何帮助都会很可爱。谢谢!
答案 0 :(得分:2)
你可以转动&堆栈:
df.pivot(columns='Type').fillna(0).stack().astype(int)
Out:
Count
date Type
2015-07-11 Cat 1
Dog 2
Pig 0
2015-07-12 Cat 2
Dog 0
Pig 0
2015-07-13 Cat 0
Dog 0
Pig 1
如果您想将其中一个或两个作为常规列,请使用reset_index():
df.pivot(columns='Type').fillna(0).stack().astype(int).reset_index()
Out:
date Type Count
0 2015-07-11 Cat 1
1 2015-07-11 Dog 2
2 2015-07-11 Pig 0
3 2015-07-12 Cat 2
4 2015-07-12 Dog 0
5 2015-07-12 Pig 0
6 2015-07-13 Cat 0
7 2015-07-13 Dog 0
8 2015-07-13 Pig 1
df.pivot(columns='Type').fillna(0).stack().astype(int).reset_index(level=1)
Out:
Type Count
date
2015-07-11 Cat 1
2015-07-11 Dog 2
2015-07-11 Pig 0
2015-07-12 Cat 2
2015-07-12 Dog 0
2015-07-12 Pig 0
2015-07-13 Cat 0
2015-07-13 Dog 0
2015-07-13 Pig 1