熊猫groupby计数,不填充计数为0

时间:2020-04-16 05:15:21

标签: python pandas

这是MRE:

df = pd.DataFrame({"hour":[1,2,2,3,3,6,6,6], "location":["a","a", "b","b","c","c","c","c"]})

如下所示:

    hour    location
0   1         a
1   2         a
2   2         b
3   3         b
4   3         c
5   6         c
6   6         c
7   6         c

当我按小时分组并计算每小时发生的时间时,我会得到

df.groupby(["hour"]).count()

>>>  location
hour    
1        1
2        2
3        2
6        3    

In要填充4和5小时并将其计数设置为0。

这就是我想要的:

    location
hour    
1       1
2       2
3       2
4       0
5       0
6       3

以前我用过

df.groupby(["hour", "location"]).count().unstack(fill_value=0).stack()

我没问题,但现在也不工作。

我认为是因为这一次我仅按一列进行分组,但是当我按两列进行分组时仍然不起作用。我不确定为什么。

1 个答案:

答案 0 :(得分:3)

方法GroupBy.count用于排除缺失值的获取计数,因此有必要在groupby之后指定缺失值的检查列,例如hour经过测试:

df = df.groupby(["hour", "location"])['hour'].count().unstack(fill_value=0).stack()

但是,如果省略groupby之后的列,此方法将使用所有其他列进行计数。因此,如果使用:

print (df.groupby(["hour"]).count())
      location
hour          
1            1
2            2
3            2
6            3

还有另一列location,因此它用于计数。

如果使用:

print (df.groupby(["location"]).count())
          hour
location      
a            2
b            2
c            4

还有另一列hour,因此它用于计数。


但是如果只有2列DataFrame,则有必要为避免空DataFrame指定一列,但这也取决于pandas version

print (df.groupby(["hour", "location"]).count())
Empty DataFrame
Columns: []
Index: [(1, a), (2, a), (2, b), (3, b), (3, c), (6, c)]

print (df.groupby(["hour", "location"])['hour'].count())
hour  location
1     a           1
2     a           1
      b           1
3     b           1
      c           1
6     c           3
Name: hour, dtype: int64

如果使用方法GroupBy.size不在乎缺失值,则它不会测试缺失值,因此groupby之后的列是没有必要的:

df = df.groupby(["hour", "location"]).size().unstack(fill_value=0).stack()

print (df)
hour  location
1     a           1
      b           0
      c           0
2     a           1
      b           1
      c           0
3     a           0
      b           1
      c           1
6     a           0
      b           0
      c           3
dtype: int64
相关问题