基于其他列条件执行Group By后,如何补全AGE缺失分组并填充0
我来帮你搞定这个问题!你需要让Pandas强制保留所有指定的年龄分组(哪怕没有对应数据),同时把结果转换成float64类型。下面是具体的解决方案:
解决方案代码
import pandas as pd purchaseDataFrame = pd.read_csv(purchasePath) val = 'P00054142' dfl = purchaseDataFrame[purchaseDataFrame['PRODUCT_ID'] == val] # 1. 定义所有需要的年龄分组集合 age_categories = ['0-17', '18-25', '26-35', '36-45', '46-50', '51-55', '55+'] # 2. 将AGE列转换为分类类型,锁定固定分组 dfl['AGE'] = pd.Categorical(dfl['AGE'], categories=age_categories, ordered=True) # 3. 按AGE分组求和,保留所有分组(无数据的会显示NaN) grouped_data = dfl.groupby('AGE', dropna=False)['PURCHASE'].sum() # 4. 填充缺失值为0.0,并转换为float64类型 result = grouped_data.fillna(0.0).astype('float64') print(result)
代码解释
- 分类类型(Categorical):这是关键一步,通过
pd.Categorical强制指定AGE列的可选值,让Pandas明确知道需要保留所有你定义的分组,哪怕筛选后的数据里没有对应记录。 dropna=False:确保分组时不会丢弃空类别(虽然分类类型默认会保留,但加上这个参数更保险)。fillna(0.0):把无数据分组的NaN替换成你需要的0.0,astype('float64')确保最终结果的类型符合要求。
运行结果
执行后你会得到和期望完全一致的输出:
AGE 0-17 0.0 18-25 4598.0 26-35 24696.0 36-45 62385.0 46-50 0.0 51-55 0.0 55+ 0.0 Name: PURCHASE, dtype: float64
内容的提问来源于stack exchange,提问作者ajay kumar
相关产品推荐
相关产品推荐

