Pandas按列表执行groupby分组的运算逻辑疑问
Pandas按列表分组执行逻辑说明
你给出的示例代码如下:
import pandas as pd import numpy as np rng = np.random.RandomState(0) df = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'], 'data1': range(6), 'data2': rng.randint(0, 10, 6)}, columns = ['key', 'data1', 'data2']) L = [0, 1, 0, 1, 2, 0] print(df); print(df.groupby(L).sum())
核心分组规则
DataFrame.groupby() 传入和原表行数相等的外部序列时,会按行位置一一对应绑定分组标签,标签相同的行将被归为同一组执行后续聚合操作。
分组映射对应关系
原表共6行,每行索引和分组标签L的对应关系如下:
- 索引0行 → L[0]=0 → 归入0组
- 索引1行 → L[1]=1 → 归入1组
- 索引2行 → L[2]=0 → 归入0组
- 索引3行 → L[3]=1 → 归入1组
- 索引4行 → L[4]=2 → 归入2组
- 索引5行 → L[5]=0 → 归入0组
聚合计算过程
本次聚合操作是sum()求和,非数值类型的key列会自动被排除出计算,仅统计data1、data2两列的总和:
- 0组包含行:索引0、2、5
- data1求和:
0 + 2 + 5 = 7 - data2求和:
5 + 3 + 9 = 17
- data1求和:
- 1组包含行:索引1、3
- data1求和:
1 + 3 = 4 - data2求和:
0 + 3 = 3
- data1求和:
- 2组包含行:仅索引4
- data1求和:
4 - data2求和:
7
- data1求和:
上述计算结果和你给出的运行输出完全对应。
内容的提问来源于stack exchange,提问作者harp1814
相关产品推荐
相关产品推荐

