Python Dataframe - 如何插入具有特定索引的行?

时间:2016-08-22 09:26:12

标签: python-2.7 pandas dataframe

我正在学习数据框架,并且正在研究动物观察的各种属性。我创建了一个数据框,计算这些动物的出现次数:

>>> 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中。这可能是一个非常愚蠢的问题,关于如何追加具有特定索引的行。

任何帮助都会很可爱。谢谢!

1 个答案:

答案 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