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

如何使用pandas查找每日数值最高行并计算对应分类占比

pandas实现需求的完整方案

步骤1:数据预处理

读取数据后先完成格式转换,同时计算每行三个分类的数值总和,作为判断小时峰值的依据:

import pandas as pd

# 读取数据,可替换为你自己的数据源读取逻辑
df = pd.read_csv("你的数据文件路径.csv")
# 将date列转为datetime格式
df['date'] = pd.to_datetime(df['date'])
# 提取日期部分作为分组维度
df['date_day'] = df['date'].dt.date
# 计算每行三个分类的总和
df['total'] = df[['CAT_A', 'CAT_B', 'CAT_C']].sum(axis=1)

步骤2:筛选每日总和最高的小时行

按天分组后取总和列最大值对应的索引,直接定位到目标行:

# 按天分组,取total列最大值对应的行索引
max_idx = df.groupby('date_day')['total'].idxmax()
# 取出所有峰值行
peak_hour_df = df.loc[max_idx].reset_index(drop=True)

可选补充:如果需要保留同一天所有总和同为最大值的小时行,可以将上述代码替换为:

df['day_max_total'] = df.groupby('date_day')['total'].transform('max')
peak_hour_df = df[df['total'] == df['day_max_total']].reset_index(drop=True)

步骤3:计算三个分类的占比

对峰值行的三个分类值做归一化计算,转为百分比格式:

# 计算各分类占比,可按需调整保留小数位数
peak_hour_df['CAT_A占比'] = (peak_hour_df['CAT_A'] / peak_hour_df['total'] * 100).round(2).astype(str) + '%'
peak_hour_df['CAT_B占比'] = (peak_hour_df['CAT_B'] / peak_hour_df['total'] * 100).round(1).astype(str) + '%'
peak_hour_df['CAT_C占比'] = (peak_hour_df['CAT_C'] / peak_hour_df['total'] * 100).round(1).astype(str) + '%'

# 可仅保留需要的输出列
result_df = peak_hour_df[['date', 'CAT_A占比', 'CAT_B占比', 'CAT_C占比']]
print(result_df.head())

运行后你给出的示例数据(1月1日5点的12、223、155)会输出对应占比:CAT_A:3.08%、CAT_B:57.2%、CAT_C:39.7%,和你预期的结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:57:02