Python “按计数分组”和“填充无”计数为0
以下是MRE: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
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