如何按指定索引区间对DataFrame单元格求和合并?
实现方案:用Pandas GroupBy按区间分组求和
你提到的需求可以通过Pandas的GroupBy功能轻松实现,核心思路是给行和列分别创建分组标签,再按标签分组求和。以下是具体步骤:
1. 构造示例DataFrame
先还原你给出的原始数据:
import pandas as pd df = pd.DataFrame([ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16] ])
2. 自定义区间分组
针对你指定的[0,2]、[2,4]区间,有两种灵活的实现方式:
方式一:按步长自动分组(适合等长区间)
如果行/列是按固定步长划分,直接用整除运算生成分组标签:
# 行分组:每2行归为一组 row_groups = df.index // 2 # 列分组:每2列归为一组 col_groups = df.columns // 2 # 分组求和并重新整理成二维表格 result = df.groupby([row_groups, col_groups]).sum().unstack()
方式二:自定义任意区间(适配非等长场景)
如果需要指定不规则区间范围,用pd.cut生成分组标签:
# 定义行和列的区间边界(左闭右开,include_lowest=True确保起始点被包含) row_bins = [0, 2, 4] col_bins = [0, 2, 4] row_groups = pd.cut(df.index, bins=row_bins, labels=False, include_lowest=True) col_groups = pd.cut(df.columns, bins=col_bins, labels=False, include_lowest=True) # 分组求和 result = df.groupby([row_groups, col_groups]).sum().unstack()
3. 输出结果
运行上述代码后,result即为你需要的合并求和结果:
0 1 0 14 22 1 46 54
这种方法比rolling更贴合需求——rolling是滑动窗口求和,而你需要的是固定区间的聚合合并,GroupBy完全匹配这个场景。
内容的提问来源于stack exchange,提问作者marc nicole
相关产品推荐
相关产品推荐

