我有一个数据帧'region_group‘。如下所示,此数据帧在“城镇/城市”列中没有“ARTHOG”值。但是,当我在此列上执行groupby优先时,此值将弹出。我正在试图理解为什么会发生这种情况。
注意: region_group数据帧基于另一个数据帧,该数据帧在“城镇/城市”列中的值为“ARTHOG”。但是它已经被where条件过滤掉了,如下所示,在Out25中也很明显
region=k[['my_ID','Town/City','District','County','month','year']]
region=region.loc[(region['month'] == 12) & (region['year'] == 2016)]
region_noid=region.drop(['my_ID','month','year'], axis=1)
region_group=region_noid.groupby(['Town/City','District','County']).size().reset_index(name='Count')

发布于 2018-02-09 09:43:01
Pandas在groupby操作中使用所有分类列的乘积来确定输出的索引。这意味着即使一个类别没有在底层数据中表示,它也会在groupby结果中表示。
关于这一点的细节,以及可能的解决方案,可以在我质疑这种行为的目的的问题中找到:Pandas groupby with categories
pandas开发团队有一个taken the stance,即类别的所有组合必须在类别序列的groupby操作中表示。
发布于 2018-02-09 09:45:07
类别数据将对类别进行带入,当没有值时,仍然保留类别但填充值为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解决方案,将其转换回字符串或数字
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发布于 2018-05-29 16:27:41
从Pandas 0.23.0开始,groupby方法现在可以接受参数"observed“,如果该参数设置为True (默认情况下为False),则可以修复此问题。
https://stackoverflow.com/questions/48697412
复制相似问题