You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按多列分组并依据分类值求和,保留空值问题

解决Pandas分组时保留type列空值记录的问题

你的问题核心是错误地仅按name单字段分组,且聚合type时用了取众数的逻辑,导致type为空的记录被合并丢失。正确的做法是按name和type(包含空值)共同分组,具体实现如下:

解决方案代码

import pandas as pd

# 构造原始数据
data = {
    'name': ['AA', 'AA', 'AA', 'AA', 'BB', 'BB', 'BB', 'BB'],
    'size': [9385, 9460, 9572, 9680, 10, 10, 20, 20],
    'type': ['FALSE', 'FALSE', 'TRUE', pd.NA, 'TRUE', 'TRUE', 'FALSE', 'FALSE']
}
df = pd.DataFrame(data)

# 按name和type分组(保留空值分组),对size求和
result = df.groupby(['name', 'type'], dropna=False)['size'].sum().reset_index()

# 将空值转为空字符串,匹配期望结果格式
result['type'] = result['type'].fillna('')

print(result)

代码说明

  • groupby(['name', 'type'], dropna=False):dropna=False是关键配置,它会把type列的空值(NaN)作为独立分组保留,不会被过滤。
  • 直接对size求和,避免了原代码中聚合type时的众数逻辑,确保每个name+type组合(包括空type)都能得到对应的size总和。
  • fillna('')将Pandas的NaN转为空字符串,和你给出的期望结果格式完全一致。

输出结果

name    size   type
0   AA   9572    TRUE
1   AA  18845   FALSE
2   AA   9680        
3   BB    20    TRUE
4   BB    40   FALSE
5   BB     NaN       

(注:最后一行的size为NaN是因为原始数据中BB没有对应空type的size记录,与你的期望结果一致)

内容的提问来源于stack exchange,提问作者Lynn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:48:20