我有一个数据框' region_group'。如下所示,此数据框没有' ARTHOG'城镇/城市的价值'柱。但是,当我按照第一组进行分组时,在此列上会重新显示此值。我正在尝试理解为什么会发生这种情况。
注意:region_group数据框基于另一个具有“ARTHOG'作为“城镇/城市”中的价值柱。但它已被滤除了如下所示的条件,并且在Out [25]
中也很明显kqueue
答案 0 :(得分:1)
类别数据将带有类别,当没有值时,仍会保留类别但填写值为NaN
df=pd.DataFrame({'A':[1,1,3,4,5],'B':[1,2,2,2,2]})
df.A=df.A.astype('category',categories=[1,2,3,4,5])
df.groupby('A').B.first()
Out[905]:
A
1 1.0
2 NaN
3 2.0
4 2.0
5 2.0
Name: B, dtype: float64
解决方案,将其转换回str或数字
df.A=df.A.astype(int)
df.groupby('A').B.first()
Out[907]:
A
1 1
3 2
4 2
5 2
Name: B, dtype: int64
或者我们正在使用remove_unused_categories
df.A=df.A.cat.remove_unused_categories()
df.groupby('A').B.first()
Out[910]:
A
1 1
3 2
4 2
5 2
Name: B, dtype: int64
答案 1 :(得分:0)
Pandas使用groupby
操作中所有分类列的乘积来确定输出的索引。这意味着即使某个类别未在基础数据中表示,也会在groupby
结果中表示。
在我的问题中可以找到有关此行为的详细信息以及可能的解决方案: Pandas groupby with categories
pandas开发团队taken the stance所有类别组合必须在分类系列的groupby
操作中表示。
答案 2 :(得分:0)
由于Pandas为0.23.0,groupby方法现在可以采用参数"观察"如果将此问题设置为True(默认情况下为False),则会修复此问题。