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

如何在Pandas中批量计算多列与Band列的比值并统计使用率区间

解决方案

1. 批量计算各日期使用率

直接通过列索引定位Band右侧的所有日期列,利用Pandas广播机制批量完成除法运算,不用逐列手动处理:

import pandas as pd

# 构造示例数据(已有目标DataFrame可跳过此步)
data = {
    'Node': ['Server1', 'Server2', 'Server3'],
    'Band': [10000, 30000, 17000],
    '5-May': [800, 600, 1500],
    '12-May': [1000, 3000, 12000],
    '19-May': [12000, 12000, 12500],
    '26-May': [12500, 12500, 500],
    '2-June': [500, 500, 1000]
}
df = pd.DataFrame(data)

# 批量处理日期列:所有日期列数值除以对应行的Band值
date_cols = df.columns[2:]  # 自动获取Band之后的所有列
df[date_cols] = df[date_cols].div(df['Band'], axis=0)
# 可选:保留两位小数让结果更整洁
df[date_cols] = df[date_cols].round(2)

执行后就能得到你需要的使用率DataFrame。

2. 按节点统计各使用率区间次数

先把宽表转成长表,再用分箱函数按指定区间统计频次:

# 定义统计区间及对应标签
bins = [0.7, 0.8, 0.9, 1.0, float('inf')]
labels = ['70%-80%', '80%-90%', '90%-100%', '100%+']

# 将日期列转为长格式,方便按节点聚合所有使用率数据
df_melted = df.melt(id_vars=['Node'], value_vars=date_cols, var_name='Date', value_name='Usage')

# 分组分箱并统计各区间次数
usage_counts = df_melted.groupby('Node')['Usage'].apply(
    lambda x: pd.cut(x, bins=bins, labels=labels, include_lowest=True).value_counts()
).unstack(fill_value=0)

# 重置索引让结果结构更清晰
usage_counts = usage_counts.reset_index()

最终usage_counts会展示每个节点在各区间的次数,比如Server1的100%+区间次数为2,和示例一致。

关键说明

  • df.columns[2:]自动适配任意数量的日期列,无需手动指定列名;
  • melt转换长表是为了统一处理所有日期的使用率数据,避免逐列统计;
  • include_lowest=True确保区间左边界值(如0.7)会被正确归入对应区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 10:12:45