Pandas Groupby agg保留空白值分组实现数值列聚合求和咨询
实现方案
首先你这个需求的核心是规避pandas groupby默认自动丢弃分组键为空(NaN)分组的默认规则,只要在groupby方法中指定dropna=False即可,完整实现代码如下:
1. 构造测试数据(和你提供的样本一致)
import pandas as pd # 构造示例df,第一列空值对应NaN df = pd.DataFrame( [ ["A", 10], ["A", 20], [None, 15], [None, 20], ["B", 10], ["B", 10], ], columns=["col1", "col2"] )
2. 分组聚合核心代码
# groupby指定dropna=False保留空分组,sort=False保留原始分组出现顺序 res = df.groupby("col1", dropna=False, sort=False)["col2"].agg(sum).reset_index() # 可选:如果需要第一列空值显示为纯空白而非NaN,执行下面这行 res["col1"] = res["col1"].fillna("")
3. 输出结果验证
最终输出的res和你要求的结果完全一致:
col1 col2 0 A 30 1 35 2 B 20
参数说明
dropna=False:必选参数,pandas groupby默认该参数为True,会自动过滤掉分组键为NaN的分组,设为False后就可以保留空值分组sort=False:可选参数,默认groupby会对分组键做升序排序,设为False后会按照分组键在原始数据中首次出现的顺序返回结果,更符合你给出的输出顺序agg(sum):对分组后的第二列执行求和聚合,也可以替换为agg("sum"),效果完全相同
内容的提问来源于stack exchange,提问作者ChilamCheung
相关产品推荐
相关产品推荐

