Pandas DataFrame 根据不同列分组,分组后对不同列使用不同的聚合函数

1. groupBy基本操作:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['a', 'b', 'a', 'c', 'a', 'c', 'b', 'c'], 
                   'B': [2, 8, 1, 4, 3, 2, 5, 9], 
                   'C': [102, 98, 107, 104, 115, 87, 92, 123]})
df
# 输出
	A 	B 	C
0 	a 	2 	102
1 	b 	8 	98
2 	a 	1 	107
3 	c 	4 	104
4 	a 	3 	115
5 	c 	2 	87
6 	b 	5 	92
7 	c 	9 	123

# 按A列分组(groupby),获取其他列的均值:
df.groupby('A').mean()
# 输出
	B 		C
A 		
a 	2.0 	108.000000
b 	6.5 	95.000000
c 	5.0 	104.666667

# 按多列进行分组(groupby)
df.groupby(['A','B']).mean()
# 输出
		C
A 	B 	
a 	1 	107
	2 	102
	3 	115
b 	5 	92
	8 	98
c 	2 	87
	4 	104
	9 	123
# 分组后选择列进行运算
df = pd.DataFrame([[1, 1, 2], [1, 2, 3], [2, 3, 4]], columns=["A", "B", "C"])
df
# 输出
	A 	B 	C
0 	1 	1 	2
1 	1 	2 	3
2 	2 	3 	4

# 按照A列分组
g = df.groupby("A")
# 仅对B列求平均值
g['B'].mean() 
# 输出
A
1    1.5
2    3.0
Name: B, dtype: float64

# 对B、C列求平均值
g[['B', 'C']].mean() 
# 输出 
     B    C
A          
1  	1.5  2.5
2  	3.0  4.0

# 针对不同的列选用不同的聚合方法(对B列求平均值,对C列求和)
g.agg({'B':'mean', 'C':'sum'})
# 输出
     B  C
A        
1  	1.5  5
2  	3.0  4

2. 分组运算后的聚合函数agg的使用

使用agg函数就可以达到针对分组后的数据使得每一列运用不同的聚合方法

df = pd.DataFrame({'A': list('XYZXYZXYZX'), 
				   'B': [1, 2, 1, 3, 1, 2, 3, 3, 1, 2], 
                   'C': [12, 14, 11, 12, 13, 14, 16, 12, 10, 19]})
df
# 输出
   A  B   C
0  X  1  12
1  Y  2  14
2  Z  1  11
3  X  3  12
4  Y  1  13
5  Z  2  14
6  X  3  16
7  Y  3  12
8  Z  1  10
9  X  2  19

# 根据A列进行分组之后对B列分别求平均值,标准差
df.groupby('A')['B'].agg(['mean', np.std])
# 输出
    mean  		standard deviation
A                              
X  2.250000      0.957427
Y  2.000000      1.000000
Z  1.333333      0.577350

# 针对不同的列应用多种不同的统计方法
# 根据A列分组,对B列分别求平均值和求和,对C求标准差
df.groupby('A').agg({'B':['mean', 'sum'], 'C':['count',np.std]})
# 输出
   B         		C          
   mean 	  sum 	count   std
A                              
X  2.250000   9     4  		3.403430
Y  2.000000   6     3  		1.000000
Z  1.333333   4     3  		2.081666

# 默认是以函数名称命名的,可以自定义
df.groupby(by='A').agg(
b_mean=pd.NamedAgg(column='B', aggfunc='mean'),
b_sum=pd.NamedAgg(column='B', aggfunc='sum'),
c_count=pd.NamedAgg(column='C', aggfunc='count'),
c_std=pd.NamedAgg(column='C', aggfunc='std'),
)
# 输出
   B         			C          
   b_mean 	  b_sum 	c_count   c_std
A                              
X  2.250000   9     	4  		3.403430
Y  2.000000   6     	3  		1.000000
Z  1.333333   4     	3  		2.081666

# 通常在调用完agg函数后需要reset_index,因为pandas会默认将groupby()的列也做为index传到结果中
df.groupby('A')['B'].agg(['min', 'max'])
# 输出
	min max
A 		
X 	1 	3
Y 	1 	3
Z 	1 	2
df.groupby('A').B.agg(['min', 'max']).reset_index()
# 输出
 	A 	min max
0 	X 	1 	3
1 	Y 	1 	3
2 	Z 	1 	2

参考链接:

  1. https://www.cnblogs.com/lemonbit/p/6810972.html
  2. https://blog.csdn.net/weixin_45144170/article/details/105008350
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python pandas是一个数据分析工具,提供了DataFrame数据结构,它有许多常见的函数可以对数据进行处理和分析。 1. 读取数据:通过read_csv()函数可以将csv格式的文件读取为DataFrame对象,并通过to_csv()函数将DataFrame对象保存为csv文件。 2. 选取数据:使用loc()和iloc()函数可以根据标签或索引选取DataFrame中的行和。例如,df.loc[0]可以选择第一行,df.loc[:, 'A']可以选择'A'。 3. 描述数据:describe()函数可以提供DataFrame中数值的基本统计信息,如计数、均值、标准差等。 4. 排序数据:通过sort_values()函数可以根据指定的或多个DataFrame进行排序。 5. 筛选数据:使用条件表达式可以筛选出满足条件的数据,例如df[df['A'] > 0]可以筛选出'A'大于0的数据。 6. 缺失值处理:fillna()函数可以将DataFrame中的缺失值用指定的值进行填充,dropna()函数可以删除包含缺失值的行或。 7. 合并数据:通过concat()和merge()函数可以将多个DataFrame对象按指定的方式合并成一个新的DataFrame。 8. 统计计算:DataFrame提供了一些常见的统计计算函数,如sum()、mean()、median()等,可以对指定的进行计算。 9. 分组操作:使用groupby()函数可以按照指定的DataFrame进行分组操作,然后进行聚合计算,如求和、平均值等。 10. 数据透视表:使用pivot_table()函数可以根据指定的行和DataFrame进行透视操作,类似于Excel中的数据透视表。 这些函数只是常见的一部分,Python pandas还提供了很多其他强大的函数和特性,可以根据实际需求去探索和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值