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

如何按Hostname和Slot分组对Pandas DataFrame的Reserved列求和?

Pandas分组求和问题解决

问题场景

现有如下Pandas DataFrame:

print(df)
# Hostname  Slot Port Reserved
# Server1     1    1    0
# Server1     1    2    0
# Server1     2    3    1
# Server2     2    1    1
# Server2     2    2    0
# Server2     2    3    1
# Server3     1    1    0
# Server3     2    2    0
# Server3     3    3    1

需要实现按Hostname和Slot分组,对Reserved列求和,期望输出:

Hostname  Slot  Total_Reserved
Server1     1      1   
Server2     2      2  
Server3     1      1  

尝试了以下代码但未得到预期结果:

new_df = df.groupby(['Hostname', 'Slot', 'Reserved']).sum()

问题分析

你错误地将Reserved也加入了分组键,这会让Pandas按Hostname+Slot+Reserved的唯一组合进行分组,而不是对Reserved列求和。比如Server1的Slot1下有两行Reserved=0,分组后会单独成组,求和结果仍为0,完全不符合需求。

正确实现

方法1:指定目标列求和并重置索引

只将Hostname和Slot作为分组键,单独对Reserved列求和,最后通过reset_index将分组键转为普通列,同时重命名求和后的列:

new_df = df.groupby(['Hostname', 'Slot'])['Reserved'].sum().reset_index(name='Total_Reserved')

方法2:使用聚合函数重命名列

通过agg方法直接指定聚合规则和新列名,再重置索引:

new_df = df.groupby(['Hostname', 'Slot']).agg(Total_Reserved=('Reserved', 'sum')).reset_index()

说明

注:根据原始数据计算,Server1 Slot1的Reserved求和结果应为0,Server3 Slot1的求和结果也为0,Server3 Slot3的求和结果为1。你给出的期望结果可能存在笔误,但上述代码完全符合「按Hostname+Slot对Reserved求和」的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:22:53