您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
這里的split指的是pandas的groupby,我們自己實現(xiàn)apply函數(shù),apply返回的結(jié)果由pandas進行combine得到結(jié)果
function的第一個參數(shù)是dataframe
function的返回結(jié)果,可是dataframe、series、單個值,甚至和輸入dataframe完全沒關(guān)系
怎樣對數(shù)值列按分組的歸一化?
怎樣取每個分組的TOPN數(shù)據(jù)?
將不同范圍的數(shù)值列進行歸一化,映射到[0,1]區(qū)間:
更容易做數(shù)據(jù)橫向?qū)Ρ?,比如價格字段是幾百到幾千,增幅字段是0到100
機器學(xué)習(xí)模型學(xué)的更快性能更好
歸一化的公式:
每個用戶的評分不同,有的樂觀派評分高,有的悲觀派評分低,按用戶做歸一化
import pandas as pd
ratings = pd.read_csv(
"./datas/movielens-1m/ratings.dat",
sep="::",
engine='python',
names="UserID::MovieID::Rating::Timestamp".split("::")
)
ratings.head()
# 實現(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()
可以看到UserID==1這個用戶,Rating==3是他的最低分,是個樂觀派,我們歸一化到0分;
獲取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()
def getWenduTopN(df, topn):
"""
這里的df,是每個月份分組group的df
"""
return df.sort_values(by="bWendu")[["ymd", "bWendu"]][-topn:]
df.groupby("month").apply(getWenduTopN, topn=1).head()
我們看到,grouby的apply函數(shù)返回的dataframe,其實和原來的dataframe其實可以完全不一樣
“Pandas如何實現(xiàn)groupby分組的apply轉(zhuǎn)換”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責聲明:本站發(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)容。