溫馨提示×

溫馨提示×

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

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

Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換

發(fā)布時間:2021-09-10 10:35:31 來源:億速云 閱讀:269 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

知識:Pandas的GroupBy遵從split、apply、combine模式

Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換

這里的split指的是pandas的groupby,我們自己實現(xiàn)apply函數(shù),apply返回的結(jié)果由pandas進行combine得到結(jié)果

 
GroupBy.apply(function)
  • function的第一個參數(shù)是dataframe

  • function的返回結(jié)果,可是dataframe、series、單個值,甚至和輸入dataframe完全沒關(guān)系

 
本次實例演示:
  1. 怎樣對數(shù)值列按分組的歸一化?

  2. 怎樣取每個分組的TOPN數(shù)據(jù)?

 

實例1:怎樣對數(shù)值列按分組的歸一化?

將不同范圍的數(shù)值列進行歸一化,映射到[0,1]區(qū)間:

  • 更容易做數(shù)據(jù)橫向?qū)Ρ?,比如價格字段是幾百到幾千,增幅字段是0到100

  • 機器學(xué)習(xí)模型學(xué)的更快性能更好

歸一化的公式:

Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換

 
演示:用戶對電影評分的歸一化

每個用戶的評分不同,有的樂觀派評分高,有的悲觀派評分低,按用戶做歸一化

import pandas as pd
 
ratings = pd.read_csv(
    "./datas/movielens-1m/ratings.dat", 
    sep="::",
    engine='python', 
    names="UserID::MovieID::Rating::Timestamp".split("::")
)
ratings.head()

Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換


# 實現(xiàn)按照用戶ID分組,然后對其中一列歸一化
def ratings_norm(df):
    """
    @param df:每個用戶分組的dataframe
    """
    min_value = df["Rating"].min()
    max_value = df["Rating"].max()
    df["Rating_norm"] = df["Rating"].apply(
        lambda x: (x-min_value)/(max_value-min_value))
    return df

ratings = ratings.groupby("UserID").apply(ratings_norm)
 
ratings[ratings["UserID"]==1].head()

Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換


 

可以看到UserID==1這個用戶,Rating==3是他的最低分,是個樂觀派,我們歸一化到0分;

 

實例2:怎樣取每個分組的TOPN數(shù)據(jù)?

獲取2018年每個月溫度最高的2天數(shù)據(jù)

fpath = "./datas/beijing_tianqi/beijing_tianqi_2018.csv"
df = pd.read_csv(fpath)
# 替換掉溫度的后綴℃
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')
# 新增一列為月份
df['month'] = df['ymd'].str[:7]
df.head()

Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換

 
def getWenduTopN(df, topn):
    """
    這里的df,是每個月份分組group的df
    """
    return df.sort_values(by="bWendu")[["ymd", "bWendu"]][-topn:]

df.groupby("month").apply(getWenduTopN, topn=1).head()

Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換


我們看到,grouby的apply函數(shù)返回的dataframe,其實和原來的dataframe其實可以完全不一樣


“Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(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