Python在groupby分組後擷取指定位置記錄方法

不言
發布: 2018-04-20 13:45:30
原創
4868 人瀏覽過

以下為大家分享一篇Python在groupby分組後擷取指定位置記錄方法,具有很好的參考價值,希望對大家有幫助。一起過來看看吧

在進行資料分析、資料建模時,我們首先要做的就是對資料進行處理,提取我們需要的資訊。以下為大家介紹一些groupby的用法,以便能夠更方便地進行資料處理。

我們往往在使用groupby進行資訊擷取時,往往是求分組後樣本的一些統計量(max、min,var等)。如果現在我們希望取一下分組後樣本的第二筆記錄,倒數第三筆記錄,這個該如何操作呢?我們可以透過first、last來提取分組後第一條和最後一條樣本。但如果我們要取指定位置的樣本,就沒有現成的函數。需要我們自己去寫了。下面我就為大家介紹如何實現上面的功能。

1)資料介紹

action表共有3列:userid、actionType和actionTime,分別代表使用者id,使用者行為類型和行為發生時間。具體格式如下圖所示:

2)分組運算

a = action.groupby('userid') 
b = action.groupby('userid')['actionTime'] 
type(a) 
type(b)
登入後複製

分組後我們可以看到a和b的資料型別是DataFrameGroupBy和SeriesGroupBy

3)取數運算

①不同使用者第二次/倒數第二次操作時間

#
action.groupby('userid')['actionTime'].apply(lambda i:i.iloc[1] if len(i)>1 else np.nan) 
action.groupby('userid')['actionTime'].apply(lambda i:i.iloc[-2] if len(i)>1 else np.nan)
登入後複製

②不同使用者某種行為第二次/倒數第二次操作時間

action[action['actionType']==2].groupby('userid')['actionTime'].apply(lambda i:i.iloc[1] if len(i)>1 else np.nan) 
action[action['actionType']==2].groupby('userid')['actionTime'].apply(lambda i:i.iloc[-2] if len(i)>1 else np.nan)
登入後複製

#PS:因為有些使用者可能只有一筆記錄,直接取可能會出錯,所以我用if先做判斷。

這樣我們就可以提取分組後資料任意位置的樣本了。

相關推薦:

pandas取得groupby分組裡最大值所在的行方法


#

以上是Python在groupby分組後擷取指定位置記錄方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板