按Category分组处理DataFrame:Size区间聚合与提取最大Size行
Pandas 数据处理解决方案
步骤1:按Category分组并创建Size的25相近区间,计算Total Count
先给每个Size值划分到最近的25倍数区间,再按Category+区间分组统计Count总和。这里用round(df['Size']/25)*25获取Size对应的最近25倍数作为区间标识,若需要按区间下限分组,可替换为(df['Size']//25)*25。
import pandas as pd # 原始数据 data = { "Category": ["900IG", "900IG", "900IG", "900IG", "900IG", "900IG", "900IG", "900IG", "900IG", "900IG", "165LK", "165LK", "165LK", "165LK", "165LK", "165LK", "165LK", "165LK", "165LK", "165LK"], "Size": [1041.4, 1020, 711.2, 660.4, 648.6, 584.2, 562.8, 508, 495.3, 488.95, 381, 431.8, 482.6, 520.7, 533.4, 558.8, 584.2, 609.6, 660.4, 750.062], "Count": [6, 1, 10, 10, 10, 23, 22, 1, 6, 3, 7, 2, 5, 8, 9, 22, 23, 10, 10, 6] } df = pd.DataFrame(data) # 生成Size的25相近区间列 df['Size_Interval'] = round(df['Size'] / 25) * 25 # 计算每个Category+区间的Total Count,并合并回原DataFrame df = df.merge( df.groupby(['Category', 'Size_Interval'])['Count'].sum().rename('Total Count'), on=['Category', 'Size_Interval'], how='left' )
步骤2:提取每个区间内Size最大的行
按Category和Size_Interval分组,每组筛选出Size值最大的记录:
# 分组筛选Size最大的行 result = df.groupby(['Category', 'Size_Interval'], as_index=False).apply( lambda group: group[group['Size'] == group['Size'].max()] ).reset_index(drop=True) # 调整列顺序(可选) result = result[['Category', 'Size_Interval', 'Size', 'Count', 'Total Count']] # 查看结果 print(result)
结果示例
运行后输出结果如下:
Category Size_Interval Size Count Total Count 0 165LK 375.0 381.00 7 7 1 165LK 425.0 431.80 2 2 2 165LK 475.0 482.60 5 5 3 165LK 525.0 533.40 9 17 4 165LK 550.0 558.80 22 22 5 165LK 575.0 584.20 23 23 6 165LK 600.0 609.60 10 10 7 165LK 650.0 660.40 10 10 8 165LK 750.0 750.06 6 6 9 900IG 475.0 495.30 6 9 10 900IG 500.0 508.00 1 1 11 900IG 550.0 562.80 22 22 12 900IG 575.0 584.20 23 23 13 900IG 650.0 660.40 10 20 14 900IG 700.0 711.20 10 10 15 900IG 1025.0 1041.40 6 7
内容的提问来源于stack exchange,提问作者Ninja
相关产品推荐
相关产品推荐

