pandas中數據聚合【重點】


數據聚合

數據聚合是數據處理的最后一步,通常是要使每一個數組生成一個單一的數值。

數據分類處理:

  • 分組:先把數據分為幾組
  • 用函數處理:為不同組的數據應用不同的函數以轉換數據
  • 合並:把不同組得到的結果合並起來

1.數據分類處理的核心: groupby()函數

導入模塊:

import pandas as pd
import numpy as np
from pandas import Series,DataFrame

生成假數據

df = DataFrame({"sailer":np.random.randint(0,3,size=50),
"item":np.random.randint(0,3,size=50),
"price":np.random.randint(1,15,size = 50),
"weight":np.random.randint(50,150,size=50)})
df["sailer"] = df["sailer"].map({0:"李大媽",1:"王大爺",2:"宋大媽"})
df["item"] = df["item"].map({0:"白菜",1:"蘿卜",2:"青椒"})
def convert(x):
return x-x%10
df["weight"] = df["weight"].map(convert)
df

如:

對數據進行分組,聚合操作

根據item進行分組,然后求出各個菜品的平均價格

g = df.groupby(by=["item"])["price"]
g.median()

表現形式如上邊,數據格式為series

然后在根據sailer和item進行分類。

ret = df.groupby(by = ["sailer","item"])[["price"]].mean()          #price值變成dataframe二維數如下圖:
ret.add_suffix("_mean")    #給列添加后綴         add_prefix()添加前綴

根據條件進行分組,然后自定義方法展示數據:如下

ret2 = df.groupby(by = ["sailer","item"])
def count(x):
       return (np.round(x.mean(),1),x.min(),x.max())                    #numpy中有round()方法是將小數四舍五入到給定的小數位數
ret2.agg(count)           

aggregate()或agg()是指在指定軸上使用一個或多個操作進行聚合。

分組后對幾個列添加不同的聚合映射關系

如下:對price求平均值,對重量求和

ret2 = df.groupby(by = ["sailer","item"])
ret2.agg({"price":"mean","weight":"sum"})

分組后使用透視表對數據進行聚合操作
pd.pivot_table(df,values=["sailer","weight"],index = ["sailer","item"],aggfunc ={"price":"mean","weight":"max"})

如下:對price、weight分別進行求平均值和最大值操作。

 

 高級數據聚合

調用transform和apply實現上變相同的功能

df.groupby(["sailer","item"])[["price"]].apply(np.min)     

 #因為min,mean,median等聚合函數在numpy定義了,所以,調用聚合函數得去numpy中調用

# transform原來的數據有多長,現在的數據就有多長
# 有利於對和原來的數據進行合並。

使用transform對數據進行分組聚合操作

df1 = df.groupby(["sailer","item"])[["price"]].transform(np.mean)

df1.tail()

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM