Pandas分组聚合生成多余行:如何排除值为0的缺失年份行?
解决方法
你可以在分组求和后,剔除suicides_no为0的行,以下是两种实用的实现方式:
方式一:分组后直接过滤
在原代码基础上追加过滤逻辑,两种写法都可行:
# 写法1:用query方法链式调用 df_temp = df_suicides.groupby(['country', 'year'], as_index=False)['suicides_no'].sum().query('suicides_no > 0') # 写法2:用布尔索引筛选 df_temp = df_suicides.groupby(['country', 'year'], as_index=False)['suicides_no'].sum() df_temp = df_temp[df_temp['suicides_no'] > 0]
方式二:分组前置过滤(可选)
如果原始数据里本身就存在suicides_no为0的行,也可以先把这些行筛掉再分组,从源头上避免出现0值分组:
df_temp = df_suicides[df_suicides['suicides_no'] > 0].groupby(['country', 'year'], as_index=False)['suicides_no'].sum()
额外提醒
要是你发现分组后出现的0值行是因为补全了缺失年份(比如之前做过reindex或pivot补全操作),那得先检查前置步骤,确保分组的数据源只保留有实际记录的行,再配合上面的过滤逻辑就能解决问题。
内容的提问来源于stack exchange,提问作者Marcin Ertmann
相关产品推荐
相关产品推荐

