使用Pandas怎么实现聚合运算和分组运算

这篇文章给大家介绍使用Pandas怎么实现聚合运算和分组运算,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1.聚合运算

使用Pandas怎么实现聚合运算和分组运算

(1)使用内置的聚合运算函数进行计算

1>内置的聚合运算函数

sum(),mean(),max(),min(),size(),describe()...等等

2>应用聚合运算函数进行计算

importnumpyasnp
importpandasaspd
#创建df对象
dict_data={
'key1':['a','b','c','d','a','b','c','d'],
'key2':['one','two','three','one','two','three','one','two'],
'data1':np.random.randint(1,10,8),
'data2':np.random.randint(1,10,8)
}

df=pd.DataFrame(dict_data)
print(df)
'''
data1data2key1key2
034aone
179btwo
257cthree
334done
487atwo
547bthree
689cone
744dtwo
'''
#根据key1分组,进行sum()运算
df=df.groupby('key1').sum()
print(df)
'''
key1
a1210
b85
c811
d1613
'''
#内置的聚合函数
print(df.groupby('key1').sum())
print('*'*50)
print(df.groupby('key1').max())
print('*'*50)
print(df.groupby('key1').min())
print('*'*50)
print(df.groupby('key1').mean())
print('*'*50)
print(df.groupby('key1').size())
print('*'*50)
#分组中非Nan数据的数量
print(df.groupby('key1').count())
print('*'*50)
print(df.groupby('key1').describe())

(2)自定义聚合函数进行计算

在使用自定义聚合函数的时候,需要用到一个agg()函数

#自定义聚合函数
#最大值-最小值
defpeak_range(df):
#返回数据范围差值
returndf.max()**2-df.min()**2

#agg()可以将聚合计算的结果祖闯成一个dataframe对象返回

print(df.groupby('key1').agg(peak_range))

#lambda
print(df.groupby('key1').agg(lambdadf:df.max()-df.min()))

(3)应用多个聚合函数,默认列索引为函数名

#应用多个聚合函数,默认列索引为函数名
#通过元素重新命名列索引('列索引',函数)
print(df.groupby('key1').agg(['sum','std','mean',('range',peak_range)]))
'''
data1data2
sumstdmeanrangesumstdmeanrange
key1
a102.8284275.040122.8284276.048
b105.6568545.08081.4142144.016
c61.4142143.01290.7071074.59
d150.7071077.51582.8284274.032
'''

(4)指定每一列使用某个聚合运算函数

#指定每一列使用某个聚合运算函数
print(df.groupby('key1').agg({'data1':'mean','data2':'sum'}))
'''
data1data2
key1
a5.012
b5.08
c3.09
d7.58
'''

2.分组运算

(1)进行分组运算,并在运算后的结果列索引前加前缀

加前缀用到add_prefix('前缀')函数

#创建df对象
dict_data={
'key1':['a','b','c','d','a','b','c','d'],
'key2':['one','two','three','one','two','three','one','two'],
'data1':np.random.randint(1,10,8),
'data2':np.random.randint(1,10,8)
}

df=pd.DataFrame(dict_data)
print(df)
'''
data1data2key1key2
015aone
193btwo
236cthree
369done
484atwo
555bthree
696cone
741dtwo
'''
#按照key1分组,进行sum()运算
#在运算结果的列索引前添加前缀
k1_sum=df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
sum_data1sum_data2
key1
a99
b148
c1212
d1010
'''

(2)进行分组运算,并把原始数据和结果数据合并

#创建df对象
dict_data={
'key1':['a','b','c','d','a','b','c','d'],
'key2':['one','two','three','one','two','three','one','two'],
'data1':np.random.randint(1,10,8),
'data2':np.random.randint(1,10,8)
}

df=pd.DataFrame(dict_data)
print(df)
'''
data1data2key1key2
015aone
193btwo
236cthree
369done
484atwo
555bthree
696cone
741dtwo
'''
#按照key1分组,进行sum()运算
#在运算结果的列索引前添加前缀
k1_sum=df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
sum_data1sum_data2
key1
a99
b148
c1212
d1010
'''
#将运算结果和原始数据拼接到一起
#参数1:原始数据
#参数2:运算结果数据
pd.merge(df,k1_sum,left_on='key1',right_index=True)

(3)使用transform()函数,将计算结果按照原始数据排序成一个DataFrame对象

#创建df对象
dict_data={
'key1':['a','b','c','d','a','b','c','d'],
'key2':['one','two','three','one','two','three','one','two'],
'data1':np.random.randint(1,10,8),
'data2':np.random.randint(1,10,8)
}

df=pd.DataFrame(dict_data)
print(df)
'''
data1data2key1key2
015aone
193btwo
236cthree
369done
484atwo
555bthree
696cone
741dtwo
'''
#按照key1分组,进行sum()运算
#在运算结果的列索引前添加前缀
k1_sum=df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
sum_data1sum_data2
key1
a99
b148
c1212
d1010
'''
#transform()计算会将计算的结果按照原始数据的排序组装成一个dataframe对象
k1_sum_tf=df.groupby('key1').transform(np.sum).add_prefix('sum_')
#print(k1_sum_tf.columns)

#把运算结果数据拼接到原始数据后
df[k1_sum_tf.columns]=k1_sum_tf
print(df)
'''
data1data2key1key2sum_data1sum_data2sum_key2
054aone912onetwo
133btwo512twothree
292cthree149threeone
365done119onetwo
448atwo912onetwo
529bthree512twothree
657cone149threeone
754dtwo119onetwo
'''

关于使用Pandas怎么实现聚合运算和分组运算就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

发布于 2021-04-15 01:55:09
收藏
分享
海报
0 条评论
160
上一篇:如何使用pandas合并excel 下一篇:怎么在laravel中添加前台跳转成功页面
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码