文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。
一.分组计算
#示例数据
df = pd.read_csv("pokemon_data.csv",encoding="gbk")
df.head(10)
姓名 | 类型1 | 类型2 | 总计 | 生命值 | 攻击力 | 防御力 | 速度 | 时代 | |
---|---|---|---|---|---|---|---|---|---|
0 | Bulbasaur | Grass | Poison | 318 | 45 | 49 | 49 | 45 | 1 |
1 | Ivysaur | Grass | Poison | 405 | 60 | 62 | 63 | 60 | 1 |
2 | Venusaur | Grass | Poison | 525 | 80 | 82 | 83 | 80 | 1 |
3 | VenusaurMega Venusaur | Grass | Poison | 625 | 80 | 100 | 123 | 80 | 1 |
4 | Charmander | Fire | NaN | 309 | 39 | 52 | 43 | 65 | 1 |
5 | Charmeleon | Fire | NaN | 405 | 58 | 64 | 58 | 80 | 1 |
6 | Charizard | Fire | Flying | 534 | 78 | 84 | 78 | 100 | 1 |
7 | CharizardMega Charizard X | Fire | Dragon | 634 | 78 | 130 | 111 | 100 | 1 |
8 | CharizardMega Charizard Y | Fire | Flying | 634 | 78 | 104 | 78 | 100 | 1 |
9 | Squirtle | Water | NaN | 314 | 44 | 48 | 65 | 43 | 1 |
1.如何分组计算
假设现在要根据“类型1”这列来做分组计算
#查看下类型1中的类别数量分布
df["类型1"].value_counts()
Water 112
Normal 98
Grass 70
Bug 69
Psychic 57
Fire 52
Electric 44
Rock 44
Ground 32
Dragon 32
Ghost 32
Dark 31
Poison 28
Steel 27
Fighting 27
Ice 24
Fairy 17
Flying 4
Name: 类型1, dtype: int64
#查看类型1中有多少个类型
len(df["类型1"].value_counts())
Q1:想知道类型1的这18个种类各自的平均攻击力是多少(单列分组计算)
#根据类型1这列来分组,并将结果存储在grouped1中
grouped1 = df.groupby("类型1")
#输出grouped1,这里就是显示它是一个分组对象,并且存储的内存地址是0x0000000008EE9E80,没什么卵用
grouped1
#求类型1的18个种类各自的平均攻击力
grouped1[["攻击力"]].mean()
攻击力 | |
---|---|
类型1 | |
Bug | 70.971014 |
Dark | 88.387097 |
Dragon | 112.125000 |
Electric | 69.090909 |
Fairy | 61.529412 |
Fighting | 96.777778 |
Fire | 84.769231 |
Flying | 78.750000 |
Ghost | 73.781250 |
Grass | 73.214286 |
Ground | 95.750000 |
Ice | 72.750000 |
Normal | 73.469388 |
Poison | 74.678571 |
Psychic | 71.456140 |
Rock | 92.863636 |
Steel | 92.703704 |
Water | 74.151786 |
小结一下:
grouped1 = df.groupby("类型1")这一步就是分组计算流程里的第一步:split
grouped1[["攻击力"]].mean() 这一步就是分组计算流程的第二和第三步:apply—combine
Q2:想知道类型1和类型2的组合类型里,每个组合各自的攻击力均值(多列分组计算)
grouped2 = df