1、groupby 能作什麼?
python中groupby函數主要的做用是進行數據的分組以及分組後地組內運算!python
對於數據的分組和分組運算主要是指groupby函數的應用,具體函數的規則以下:app
df[](指輸出數據的結果屬性名稱).groupby([df[屬性],df[屬性])(指分類的屬性,數據的限定定語,能夠有多個).mean()(對於數據的計算方式——函數名稱)
舉例以下:
print(df["評分"].groupby([df["地區"],df["類型"]]).mean())
#上面語句的功能是輸出表格全部數據中不一樣地區不一樣類型的評分數據平均值函數
2、單類分組
A.groupby("性別")
首先,咱們有一個變量A,數據類型是DataFramespa
想要按照【性別】進行分組3d
獲得的結果是一個Groupby對象,尚未進行任何的運算。code
describe()
描述組內數據的基本統計量orm
A.groupby("性別").describe().unstack()
* 只有數字類型的列數據纔會計算統計對象
* 示例裏面數字類型的數據有兩列 【班級】和【身高】blog
可是,咱們並不須要統計班級的均值等信息,只須要【身高】,因此作一下小的改動:排序
A.groupby("性別")["身高"].describe().unstack()
unstack()
索引重排
上面的例子裏面用到了一個小的技巧,讓運算結果更便於對比查看,感興趣的同窗能夠自行去除unstack,比較一下顯示的效果
3、多類分組
A.groupby( ["班級","性別"])
單獨用groupby,咱們獲得的仍是一個 Groupby 對象。
mean()
組內均值計算
DataFrame的不少函數能夠直接運用到Groupby對象上。
上圖截自 pandas 官網 document,這裏就不一一細說。
咱們還能夠一次運用多個函數計算
A.groupby( ["班級","性別"]).agg([np.sum, np.mean, np.std]) # 一次計算了三個
agg()
分組多個運算
4、時間分組
時間序列能夠直接做爲index,或者有一列是時間序列,差異不是很大。
這裏僅僅演示,某一列爲時間序列。
爲A 新增一列【生日】,因爲分隔符 「/」 的問題,咱們查看列屬性,【生日】的屬性並非日期類型
咱們想作的是:
一、按照【生日】的【年份】進行分組,看看有多少人是同齡?
A["生日"] = pd.to_datetime(A["生日"],format ="%Y/%m/%d") # 轉化爲時間格式
A.groupby(A["生日"].apply(lambda x:x.year)).count() # 按照【生日】的【年份】分組
進一步,咱們想選拔:
二、同一年做爲一個小組,小組內生日靠前的那一位做爲小隊長:
A.sort_values("生日", inplace=True) # 按時間排序
A.groupby(A["生日"].apply(lambda x:x.year),as_index=False).first()
as_index=False
保持原來的數據索引結果不變
first()
保留第一個數據
Tail(n=1)
保留最後n個數據
再進一步:
三、想要找到哪一個月只有一我的過生日
A.groupby(A["生日"].apply(lambda x:x.month),as_index=False) # 到這裏是按月分組
A.groupby(A["生日"].apply(lambda x:x.month),as_index=False).filter(lambda x: len(x)==1)
filter()
對分組進行過濾,保留知足()條件的分組
以上就是 groupby 最常常用到的功能了。
用 first(),tail()截取每組先後幾個數據
用 apply()對每組進行(自定義)函數運算
用 filter()選取知足特定條件的分組