基于日期和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
相关产品推荐
相关产品推荐

