例子
import numpy as np
import pandas as pd
df = pd.DataFrame([{'类别': '黄水果', '水果': '香蕉', '点赞': 14, '投币': 7}, {'类别': '黄水果', '水果': '菠萝', '点赞': 30, '投币': 15}, {'类别': '黄水果', '水果': '柠檬', '点赞': 50, '投币': 25}, {'类别': '红水果', '水果': '草莓', '点赞': 160, '投币': 80}, {'类别': '红水果', '水果': '苹果', '点赞': 6, '投币': 3}, {'类别': '红水果', '水果': '樱桃', '点赞': 8, '投币': 4}])
|
类别 |
水果 |
点赞 |
投币 |
0 |
黄水果 |
香蕉 |
14 |
7 |
1 |
黄水果 |
菠萝 |
30 |
15 |
2 |
黄水果 |
柠檬 |
50 |
25 |
3 |
红水果 |
草莓 |
160 |
80 |
4 |
红水果 |
苹果 |
6 |
3 |
5 |
红水果 |
樱桃 |
8 |
4 |

groupby
grouped = df1.groupby(['类别','水果'])
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7feea03249d0>
agg()参数
方法 |
说明 |
agg_df = df.groupby(['类别'])['点赞'].agg('mean') |
单维单列单值 |
agg_df = df.groupby(['类别']).agg('mean') |
单维双列单值 |
agg_df = df.groupby(['类别'])['点赞'].agg(['min','max']) |
单维单列双值 |
agg_df = df.groupby(['类别'])['点赞'].agg([('最小值','min'),('最大值','max')]) |
单维单列双值改名 |
agg_df = df.groupby(['类别']).agg({'点赞':['sum','mean'], '投币':['min','max']}) |
单维双列双值 |
agg_df = df.groupby(['类别', '水果']).agg({'点赞':['sum','mean'], '投币':['min','max']}) |
多维双列双值 |
函数名 |
说明 |
count或size |
分组中非NA值得数量 |
sum |
非NA值的和 |
mean |
非NA值的平均值 |
median |
非NA值的算术平均数(中位数) |
std、var |
无偏(分母为n-1)标准差和方差 |
min、max |
非NA值的最小值和最大值 |
prod |
非NA值的积 |
first、last |
第一个和最后一个非NA值 |
单维单列单值
单维’类别’ - 单列’点赞’ - 求单值平均数mean
agg_df = df.groupby(['类别'])['点赞'].agg('mean')
类别 |
|
红水果 |
58.000000 |
黄水果 |
31.333333 |
Name: 点赞, dtype: float64
单维双列单值
单维’类别’ - 双列’点赞’、’投币’ - 求单值平均数mean
agg_df = df.groupby(['类别']).agg('mean')
|
点赞 |
投币 |
类别 |
|
|
红水果 |
58.000000 |
29.000000 |
黄水果 |
31.333333 |
15.666667 |
单维单列多值
单维’类别’ - 单列’点赞’ - 求双值最大值max、最小值min
agg_df = df.groupby(['类别'])['点赞'].agg(['min','max'])
agg_df = df.groupby(['类别'])['点赞'].agg([('最小值','min'),('最大值','max')])
|
min |
max |
类别 |
|
|
红水果 |
6 |
160 |
黄水果 |
14 |
50 |
|
最小值 |
最大值 |
类别 |
|
|
红水果 |
6 |
160 |
黄水果 |
14 |
50 |
单维双列多值
单维’类别’ - 双列’点赞’、’投币’ - 求多值最大值max、最小值min、平均值mean、和sum
agg_df = df.groupby(['类别']).agg({'点赞':['sum','mean'], '投币':['min','max']})
|
点赞 |
|
投币 |
|
|
sum |
mean |
min |
max |
类别 |
|
|
|
|
红水果 |
174 |
58.000000 |
3 |
80 |
黄水果 |
94 |
31.333333 |
7 |
25 |
多维双列多值
多维’类别’,’水果’ - 双列’点赞’、’投币’ - 求多值最大值max、最小值min、平均值mean、和sum
agg_df = df.groupby(['类别', '水果']).agg({'点赞':['sum','mean'], '投币':['min','max']})
|
|
点赞 |
|
投币 |
|
|
|
sum |
mean |
min |
max |
类别 |
水果 |
|
|
|
|
红水果 |
樱桃 |
8 |
8 |
4 |
4 |
|
苹果 |
6 |
6 |
3 |
3 |
|
草莓 |
160 |
160 |
80 |
80 |
黄水果 |
柠檬 |
50 |
50 |
25 |
25 |
|
菠萝 |
30 |
30 |
15 |
15 |
|
香蕉 |
14 |
14 |
7 |
7 |
## 去掉最上面的Multi-Level
agg_df = agg_df.droplevel(0, axis=1)
## 重复的话,会多个同名列名,需要改名
列级 - df.columns=[“a”,”b”] - 重命名列名
|
|
sum |
mean |
min |
max |
类别 |
水果 |
|
|
|
|
红水果 |
樱桃 |
8 |
8 |
4 |
4 |
|
苹果 |
6 |
6 |
3 |
3 |
|
草莓 |
160 |
160 |
80 |
80 |
黄水果 |
柠檬 |
50 |
50 |
25 |
25 |
|
菠萝 |
30 |
30 |
15 |
15 |
|
香蕉 |
14 |
14 |
7 |
7 |
agg_df = agg_df.reset_index()
类别 |
水果 |
sum |
mean |
min |
max |
红水果 |
樱桃 |
8 |
8 |
4 |
4 |
红水果 |
苹果 |
6 |
6 |
3 |
3 |
红水果 |
草莓 |
160 |
160 |
80 |
80 |
黄水果 |
柠檬 |
50 |
50 |
25 |
25 |
黄水果 |
菠萝 |
30 |
30 |
15 |
15 |
黄水果 |
香蕉 |
14 |
14 |
7 |
7 |