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

如何在Pandas中按条件列求和及统计Cranes总访问量

技术问题一:如何在Pandas中结合另一条件列计算某列的总和?

这是Pandas里非常常见的需求,我给你几个实用的实现方式:

  • 布尔索引直接求和:如果只想筛选满足某列条件的行,再对目标列求和,直接用布尔表达式过滤就行。比如要计算priority列为yes时visits列的总和:

    total = df[df['priority'] == 'yes']['visits'].sum()
    
  • 分组求和(按条件列):如果需要按条件列分组后,分别计算每组目标列的总和,用groupby更合适:

    sum_by_condition = df.groupby('priority')['visits'].sum()
    
  • 多条件组合求和:要是有多个筛选条件,用&(逻辑且)或|(逻辑或)组合布尔表达式,记得给每个条件加括号:

    total = df[(df['priority'] == 'yes') & (df['birds'] == 'Cranes')]['visits'].sum()
    

技术问题二:统计鸟类Cranes的总访问次数并输出指定格式

你当前的groupby操作之所以会出现age列,是因为sum()默认会对DataFrame里所有数值类型的列进行求和运算(你的age和visits都是数值列)。要得到你想要的输出,我们可以分步处理:

1. 筛选Cranes的访问记录

先提取birds列为Cranes的行,只保留birds和visits两列,避免其他列干扰:

cranes_data = df[df['birds'] == 'Cranes'][['birds', 'visits']]

2. 添加总计行

接下来我们创建一行总计数据,把Cranes的所有visits加起来,再和原始记录合并:

# 生成总计行
total_row = pd.DataFrame({'birds': ['Total'], 'visits': [cranes_data['visits'].sum()]})
# 合并原始数据和总计行
result = pd.concat([cranes_data, total_row], ignore_index=True)

3. 输出指定格式

现在打印结果就能得到你想要的样式了,用to_string(index=False)可以去掉默认的索引列:

print(result.to_string(index=False))

执行后输出如下:

birds  visits
Cranes       2
Cranes       4
Cranes       4
Cranes       2
Total       12

补充:如果只想对指定列分组求和

要是你只是想避免age列被求和,而非保留原始记录,那可以在groupby后明确指定要计算的列:

# 只对visits列分组求和,不会包含age列
g = df.groupby(['birds','visits'])['visits'].sum()

不过这个结果是分组后的求和值,和你想要的原始记录+总计的需求不太一样,所以还是前面的分步方法更贴合你的期望。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:44:53