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

基于日期和Value1区间分组求和生成新DataFrame的实现方法

按日期+Value1区间分组求和Value2解决方案

原始数据

import pandas as pd

df = pd.DataFrame({
    'Date': ['1-8','1-8','1-8','2-8','2-8','2-8'],
    'Value1': [9,12,7,8,15,16],
    'Value2': [1,3,2,4,2,3]
})

需求说明

按Date维度分组,同时将Value1按可扩展区间(如1-10、11-20…>100,区间可通过range(0, 100, 10)规则生成)划分,对每个分组内的Value2进行求和,最终生成包含Date和各区间列的宽格式DataFrame。

预期结果

new_df = pd.DataFrame({
    'Date': ['1-8','2-8'],
    '1-10': [3,4],
    '11-20':[3,5]
})

实现步骤

1. 生成区间边界与标签

先定义区间的划分规则,包含0到100的步长区间,以及最后一个">100"的兜底区间:

# 生成区间边界:0,10,...,100
bins = list(range(0, 110, 10))
# 生成对应标签:1-10,11-20,...,91-100,>100
labels = [f"{i+1}-{i+10}" for i in range(0, 100, 10)] + [">100"]

2. 为数据添加区间分类列

使用pd.cut将Value1的值映射到对应的区间标签:

df['Value1_Range'] = pd.cut(df['Value1'], bins=bins, labels=labels, include_lowest=True)

3. 分组求和并转宽表

先按Date和Value1_Range分组对Value2求和,再通过pivot将长表转为宽表,最后处理缺失值:

# 分组求和
grouped = df.groupby(['Date', 'Value1_Range'])['Value2'].sum().reset_index()
# 转成宽表结构
new_df = grouped.pivot(index='Date', columns='Value1_Range', values='Value2').reset_index()
# 缺失值填充为0(若某日期无对应区间的数据)
new_df = new_df.fillna(0)
# 移除列索引的名称
new_df.columns.name = None

执行以上代码后,new_df即符合预期结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:55:34