@创建于:2022.07.01
@修改于:2022.07.01
- 1、构建样例数据(无Null值)
- 2、agg常见聚合函数
- 3、agg匿名聚合函数
- 4、构建样例数据(有Null值)
- 5、transform应用
- 6、apply应用
- 7、参考链接
import pandas as pd
import numpy as np
df = pd.DataFrame({'books':['book_1', 'book_2', 'book_2', 'book_1', 'book_2', 'book_3'],
'price':[10, 20, 30, 30, 20, 10],
'num':[4, 6, 2, 4, 2, 8]})
df
books price num
0 book_1 10 4
1 book_2 20 6
2 book_2 30 2
3 book_1 30 4
4 book_2 20 2
5 book_3 10 8
2、agg常见聚合函数
f_agg = ['max','mean', 'sum']
df.groupby('books')['price', 'num'].agg(func=f_agg)
3、agg匿名聚合函数
# 可以使用匿名聚合函数
# 可以使用as_index=False是的分组字段不作为行索引
df.groupby('books', as_index=False)['price', 'num'].agg(lambda x: x.eq(10).sum())
books price num
0 book_1 1 0
1 book_2 0 0
2 book_3 1 0
# 当agg中的聚合函数多于1个的时候,as_index失效
df.groupby('books', as_index=False)['price'].agg([lambda x: x.eq(10).sum(), 'mean']).rename({'':'eq10'}, axis=1)
eq10 mean
books
book_1 1 20.000000
book_2 0 23.333333
book_3 1 10.000000
f_agg = ['max', lambda x: x.eq(10).sum(), 'mean', lambda x: x.isna().sum()]
df.groupby('books')['price'].agg(func=f_agg).rename({'':'eq10'}, axis=1)
max eq10 mean
books
book_1 30 1 20.000000 0
book_2 30 0 23.333333 0
book_3 10 1 10.000000 0
4、构建样例数据(有Null值)
df2 = pd.DataFrame({'books':['book_1', 'book_1', 'book_2', 'book_2', 'book_2', 'book_3', 'book_4'],
'price':[10, 20, 10, 30, None,10, np.NaN],
'num':[2, 4, np.NaN, 2, 4, 8, 2]})
df2
books price num
0 book_1 10.0 2.0
1 book_1 20.0 4.0
2 book_2 10.0 NaN
3 book_2 30.0 2.0
4 book_2 NaN 4.0
5 book_3 10.0 8.0
6 book_4 NaN 2.0
5、transform应用
df2.groupby('books').transform(lambda x: x.fillna(x.mean()))
# 没有了books这一列
price num
0 10.0 2.0
1 20.0 4.0
2 10.0 3.0
3 30.0 2.0
4 20.0 4.0
5 10.0 8.0
6 NaN 2.0
6、apply应用
df2.groupby('books').apply(lambda x: x.fillna(x.mean()))
dft = df2.groupby('books').apply(lambda x: x.fillna(x.mean()))
dft.index = dft.index.droplevel(0)
dft
df2.groupby('books').transform(lambda x: x/x.max())
df2.groupby('books').apply(lambda x: x/x.max())
# 二者的结果是一致的,都没有books字段
price num
0 0.500000 0.5
1 1.000000 1.0
2 0.333333 NaN
3 1.000000 0.5
4 NaN 1.0
5 1.000000 1.0
6 NaN 1.0
7、参考链接
Pandas教程 | 超好用的Groupby用法详解
DataFrame进行数据分组运算并筛选指定条件的group



