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

如何基于DataFrame列的条件汇总另一列值并绘制统计图表

代码错误原因
  • 第一版代码问题:筛选子集后直接对全列做轴向求和,activity列的数值也被计入总和,且没有单独提取count列做聚合,结果不符合预期。
  • 第二版np.where代码问题:存在列名拼写错误(将activity写为actibity),条件成立时取值列选错(取了activity列而非count列),还引用了当前DataFrame中不存在的hoursActive列,无法正常运行。
正确统计实现

首先导入依赖库,完成两个求和逻辑:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 构造示例DataFrame,实际使用时替换为你自己的数据读取逻辑
df = pd.DataFrame({
    'activity': [1,2,3,4,5,6,7,8,9,10],
    'count': [25,38,49,55,61,74,82,98,103,4084]
})

# 需求1:筛选activity < 6的行,对count列求和
sum_lt_6 = df.loc[df['activity'] < 6, 'count'].sum()
# 需求2:筛选activity <= 6的行,对count列求和
sum_le_6 = df.loc[df['activity'] <= 6, 'count'].sum()

# 核对输出结果:sum_lt_6 = 228,sum_le_6 = 302
print(sum_lt_6, sum_le_6)

如果需要用np.where实现,可以参考如下写法:

np.where基础语法:np.where(判断条件, 条件为真时的返回值, 条件为假时的返回值)

# 标记符合条件的行
df['flag_lt6'] = np.where(df['activity'] < 6, 1, 0)
df['flag_le6'] = np.where(df['activity'] <= 6, 1, 0)

# 按标记求和
sum_lt_6_np = (df['count'] * df['flag_lt6']).sum()
sum_le_6_np = (df['count'] * df['flag_le6']).sum()
结果可视化

通过柱状图展示两个统计值即可:

# 绘图配置
plt.figure(figsize=(6, 4))
label_list = ['activity < 6', 'activity <= 6']
value_list = [sum_lt_6, sum_le_6]

plt.bar(label_list, value_list, color=['#4c72b0', '#dd8452'])
# 在柱子上标注具体数值
for idx, val in enumerate(value_list):
    plt.text(idx, val + 8, str(val), ha='center')

plt.ylabel('count列求和结果')
plt.title('不同activity阈值下的count总和')
plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:15:26