小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

pandas中數(shù)據(jù)聚合【重點(diǎn)】

 北方的白樺林 2020-05-04

數(shù)據(jù)聚合

數(shù)據(jù)聚合是數(shù)據(jù)處理的最后一步,通常是要使每一個(gè)數(shù)組生成一個(gè)單一的數(shù)值。

數(shù)據(jù)分類處理:

  • 分組:先把數(shù)據(jù)分為幾組
  • 用函數(shù)處理:為不同組的數(shù)據(jù)應(yīng)用不同的函數(shù)以轉(zhuǎn)換數(shù)據(jù)
  • 合并:把不同組得到的結(jié)果合并起來

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

導(dǎo)入模塊:

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

生成假數(shù)據(jù)

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

如:

對(duì)數(shù)據(jù)進(jìn)行分組,聚合操作

根據(jù)item進(jìn)行分組,然后求出各個(gè)菜品的平均價(jià)格

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

表現(xiàn)形式如上邊,數(shù)據(jù)格式為series

然后在根據(jù)sailer和item進(jìn)行分類。

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

根據(jù)條件進(jìn)行分組,然后自定義方法展示數(shù)據(jù):如下

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

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

分組后對(duì)幾個(gè)列添加不同的聚合映射關(guān)系

如下:對(duì)price求平均值,對(duì)重量求和

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

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

如下:對(duì)price、weight分別進(jìn)行求平均值和最大值操作。

 

 高級(jí)數(shù)據(jù)聚合

調(diào)用transform和apply實(shí)現(xiàn)上變相同的功能

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

 #因?yàn)閙in,mean,median等聚合函數(shù)在numpy定義了,所以,調(diào)用聚合函數(shù)得去numpy中調(diào)用

# transform原來的數(shù)據(jù)有多長(zhǎng),現(xiàn)在的數(shù)據(jù)就有多長(zhǎng)
# 有利于對(duì)和原來的數(shù)據(jù)進(jìn)行合并。

使用transform對(duì)數(shù)據(jù)進(jìn)行分組聚合操作

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

df1.tail()

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多