Python “按计数分组”和“填充无”计数为0

Python “按计数分组”和“填充无”计数为0,python,pandas,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

以下是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    
在中,您希望填写第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()
我对此没有问题,但现在也没有工作

我想这是因为这次我只按一列分组,但当我按两列分组时,它仍然不起作用。我不知道为什么。

方法用于排除缺失值的get计数,因此有必要在
groupby
之后指定列以检查缺失值的列,例如,这里测试了
小时数

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
还有另一列
位置
,因此它使用它进行计数

如果使用:

print (df.groupby(["location"]).count())
          hour
location      
a            2
b            2
c            4
还有另一列
hour
,因此它使用它进行计数


但如果只有两列
DataFrame
,则有必要指定列以避免为空
DataFrame
,但这还取决于:


如果使用“不关心缺失值”方法,则不会测试缺失值,因此在
groupby
之后不需要列:

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


在groupby声明中只使用一列怎么样?@Ambleu-我希望所有信息都在回答中,如果需要添加内容,请告诉我。对不起,我不完全理解您的解释。对于df.groupby([“hour”]),它是如何工作的?@Ambleu-它使用了所有其他列,没有
hour
进行计数,所以这里是
location
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