溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用Pandas怎么實現(xiàn)聚合運算和分組運算

發(fā)布時間:2021-04-14 16:28:25 來源:億速云 閱讀:187 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章給大家介紹使用Pandas怎么實現(xiàn)聚合運算和分組運算,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1.聚合運算

(1)使用內(nèi)置的聚合運算函數(shù)進行計算

1>內(nèi)置的聚合運算函數(shù)

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

2>應(yīng)用聚合運算函數(shù)進行計算

import numpy as np
import pandas as pd
#創(chuàng)建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)
'''
  data1 data2 key1  key2
0   3   4  a  one
1   7   9  b  two
2   5   7  c three
3   3   4  d  one
4   8   7  a  two
5   4   7  b three
6   8   9  c  one
7   4   4  d  two
'''
#根據(jù)key1分組,進行sum()運算
df = df.groupby('key1').sum()
print(df)
'''
key1       
a    12   10
b     8   5
c     8   11
d    16   13
'''
#內(nèi)置的聚合函數(shù)
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數(shù)據(jù)的數(shù)量
print(df.groupby('key1').count())
print('*'*50)
print(df.groupby('key1').describe())

(2)自定義聚合函數(shù)進行計算

在使用自定義聚合函數(shù)的時候,需要用到一個agg()函數(shù)

#自定義聚合函數(shù)
#最大值-最小值
def peak_range(df):
  #返回數(shù)據(jù)范圍差值
  return df.max()**2 - df.min()**2
 
#agg() 可以將聚合計算的結(jié)果祖闖成一個dataframe對象返回
 
print(df.groupby('key1').agg(peak_range))
 
#lambda
print(df.groupby('key1').agg(lambda df:df.max()-df.min()))

(3)應(yīng)用多個聚合函數(shù),默認(rèn)列索引為函數(shù)名

#應(yīng)用多個聚合函數(shù),默認(rèn)列索引為函數(shù)名
#通過元素重新命名列索引('列索引',函數(shù))
print(df.groupby('key1').agg(['sum','std','mean',('range',peak_range)]))
'''
   data1           data2           
    sum    std mean range  sum    std mean range
key1                           
a    10 2.828427 5.0  40  12 2.828427 6.0  48
b    10 5.656854 5.0  80   8 1.414214 4.0  16
c    6 1.414214 3.0  12   9 0.707107 4.5   9
d    15 0.707107 7.5  15   8 2.828427 4.0  32
'''

(4)指定每一列使用某個聚合運算函數(shù)

#指定每一列使用某個聚合運算函數(shù)
print(df.groupby('key1').agg({'data1':'mean','data2':'sum'}))
'''
   data1 data2
key1       
a    5.0   12
b    5.0   8
c    3.0   9
d    7.5   8
'''

2.分組運算

(1)進行分組運算,并在運算后的結(jié)果列索引前加前綴

加前綴用到add_prefix('前綴')函數(shù)

#創(chuàng)建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)
'''
  data1 data2 key1  key2
0   1   5  a  one
1   9   3  b  two
2   3   6  c three
3   6   9  d  one
4   8   4  a  two
5   5   5  b three
6   9   6  c  one
7   4   1  d  two
'''
#按照key1分組,進行sum()運算
#在運算結(jié)果的列索引前添加前綴
k1_sum = df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
   sum_data1 sum_data2
key1           
a       9     9
b      14     8
c      12     12
d      10     10
'''

(2)進行分組運算,并把原始數(shù)據(jù)和結(jié)果數(shù)據(jù)合并

#創(chuàng)建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)
'''
  data1 data2 key1  key2
0   1   5  a  one
1   9   3  b  two
2   3   6  c three
3   6   9  d  one
4   8   4  a  two
5   5   5  b three
6   9   6  c  one
7   4   1  d  two
'''
#按照key1分組,進行sum()運算
#在運算結(jié)果的列索引前添加前綴
k1_sum = df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
   sum_data1 sum_data2
key1           
a       9     9
b      14     8
c      12     12
d      10     10
'''
#將運算結(jié)果和原始數(shù)據(jù)拼接到一起
#參數(shù)1:原始數(shù)據(jù)
#參數(shù)2:運算結(jié)果數(shù)據(jù)
pd.merge(df,k1_sum,left_on='key1',right_index=True)

(3)使用transform()函數(shù),將計算結(jié)果按照原始數(shù)據(jù)排序成一個DataFrame對象

#創(chuàng)建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)
'''
  data1 data2 key1  key2
0   1   5  a  one
1   9   3  b  two
2   3   6  c three
3   6   9  d  one
4   8   4  a  two
5   5   5  b three
6   9   6  c  one
7   4   1  d  two
'''
#按照key1分組,進行sum()運算
#在運算結(jié)果的列索引前添加前綴
k1_sum = df.groupby('key1').sum().add_prefix('sum_')
print(k1_sum)
'''
   sum_data1 sum_data2
key1           
a       9     9
b      14     8
c      12     12
d      10     10
'''
#transform() 計算 會將計算的結(jié)果按照原始數(shù)據(jù)的排序組裝成一個dataframe對象
k1_sum_tf = df.groupby('key1').transform(np.sum).add_prefix('sum_')
# print(k1_sum_tf.columns)
 
#把運算結(jié)果數(shù)據(jù)拼接到原始數(shù)據(jù)后
df[k1_sum_tf.columns] = k1_sum_tf
print(df)
'''
  data1 data2 key1  key2 sum_data1 sum_data2 sum_key2
0   5   4  a  one     9    12  onetwo
1   3   3  b  two     5    12 twothree
2   9   2  c three    14     9 threeone
3   6   5  d  one    11     9  onetwo
4   4   8  a  two     9    12  onetwo
5   2   9  b three     5    12 twothree
6   5   7  c  one    14     9 threeone
7   5   4  d  two    11     9  onetwo
'''

關(guān)于使用Pandas怎么實現(xiàn)聚合運算和分組運算就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI