DataFrame.groupby()所見的各種用法詳解
groupby的函數(shù)定義:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
- by :接收映射、函數(shù)、標簽或標簽列表;用于確定聚合的組。
- axis : 接收 0/1;用于表示沿行(0)或列(1)分割。
- level : 接收int、級別名稱或序列,默認為None;如果軸是一個多索引(層次化),則按一個或多個特定級別分組。
- as_index:接收布爾值,默認Ture;Ture則返回以組標簽為索引的對象,F(xiàn)alse則不以組標簽為索引。
其他的參數(shù)解釋就看文檔吧:鏈接:pandas.DataFrame.groupby 介紹文檔
所見 1 :日常用法
import pandas as pd df = pd.DataFrame({'Gender' : ['男', '女', '男', '男', '男', '男', '女', '女', '女'], 'name' : ['周杰倫', '蔡依林', '林俊杰', '周杰倫', '林俊杰', '周杰倫', '田馥甄', '蔡依林', '田馥甄'], 'income' : [4.5, 2.9, 3.8, 3.7, 4.0, 4.1, 1.9, 4.1, 3.2], 'expenditure' : [1.5, 1.9, 2.8, 1.7, 4.1, 2.5, 1.1, 3.4, 1.2] }) #根據(jù)其中一列分組 df_expenditure_mean = df.groupby(['Gender']).mean() #根據(jù)其中兩列分組 df_expenditure_mean = df.groupby(['Gender', 'name']).mean() #只對其中一列求均值 df_expenditure_mean = df.groupby(['Gender', 'name'])['income'].mean()
輸出示例:
所見 2 :解決groupby.sum() 后層級索引levels上移的問題
上圖中的輸出二,雖然是 DataFrame 的格式,但是若需要與其他表匹配的時候,這個格式就有些麻煩了。匹配數(shù)據(jù)時,我們需要的數(shù)據(jù)格式是:列名都在第一行,數(shù)據(jù)行中也不能有 Gender 列這樣的合并單元格。因此,我們需要做一些調(diào)整,將 as_index 改為 False ,默認是 Ture 。
#不以組標簽為索引,通過 as_index 來實現(xiàn) df_expenditure_mean = df.groupby(['Gender', 'name'], as_index=False).mean()
輸出:
所見 3 :解決groupby.apply() 后層級索引levels上移的問題
在所見 2 中我們知道,使用參數(shù) as_index 就可使 groupby 的結(jié)果不以組標簽為索引,但是后來在使用 groupby.apply() 時發(fā)現(xiàn),as_index 參數(shù)失去了效果。如下例所示:
# 使用了 as_index=False,但是從輸出結(jié)果中可見沒起到作用 df_apply = df.groupby(['Gender', 'name'], as_index=False).apply(lambda x: sum(x['income']-x['expenditure'])/sum(x['income'])) df_apply = pd.DataFrame(df_apply,columns=['存錢占比'])#轉(zhuǎn)化成dataframe格式
輸出:
解決辦法: 加一句df_apply_index = df_apply.reset_index()
# 加一句df_apply_index = df_apply.reset_index() df_apply = df.groupby(['Gender', 'name'], as_index=False).apply(lambda x: sum(x['income']-x['expenditure'])/sum(x['income'])) df_apply = pd.DataFrame(df_apply,columns=['存錢占比'])#轉(zhuǎn)化成dataframe格式 df_apply_index = df_apply.reset_index()
輸出:
所見 4 :groupby函數(shù)的分組結(jié)果保存成DataFrame
所見 1 中的輸出三,明顯是 Series ,我們需要將其轉(zhuǎn)化為 DataFrame 格式的數(shù)據(jù)。
#只對其中一列求均值,并轉(zhuǎn)化為 DataFrame df_expenditure_mean = df.groupby(['Gender', 'name'], as_index=False)['income'].mean() df_expenditure_mean = pd.DataFrame(df_expenditure_mean)#轉(zhuǎn)化成dataframe格式 df_expenditure_mean.rename(columns={'income':'收入均值'}, inplace = True)
輸出:
到此這篇關于 DataFrame.groupby() 所見的各種用法詳解的文章就介紹到這了,更多相關 DataFrame.groupby()用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python3列表內(nèi)置方法大全及示例代碼小結(jié)
這篇文章主要介紹了Python3列表內(nèi)置方法大全及示例代碼小結(jié),非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05python操作Excel神器openpyxl看這一篇就夠了
Python使用openpyxl讀寫excel文件這是一個第三方庫,可以處理xlsx格式的Excel文件,下面這篇文章主要給大家介紹了關于python操作Excel神器openpyxl的相關資料,需要的朋友可以參考下2023-04-04Python3+PyInstall+Sciter解決報錯缺少dll、html等文件問題
這篇文章主要介紹了Python3+PyInstall+Sciter解決報錯缺少dll、html等文件問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07