1. 聚合
grouped=df.groupby(by='column name'), 是一個DataFrameGroupBy對象,可以迭代grouped中的每個元素是一個元組,元組里面的值是(索引(分組的值),分組之后的DataFrame對象)
1 dfs_002=dfs_001.groupby(by='Cabinet / ATO')
常見的DataFrameGroupBy對象經過優化的方法:
(1) count 分組中非Na值的數量
(2) sum 非NA值的和
(3) mean 非NA值的平均值
(4) median 非NA值的算數中位數
(5) std, var 無偏(分母為n-1)標准差和方差
(6) min, max 非NA值的最大和最小值
2. 分組
如果對df對象的所有列按照某個字段分組,分組的結果是DataFrameGroupBy,行索引是macd_flag。而且,當對df對象的所有列按照某個字段應用分組統計函數時,結果是一個dataframe對象。
dfs_macd_a.groupby(by='macd_flag') dfs_macd_a.groupby(by='macd_flag').count()
考慮另外一個場景,假如要想統計在df數據集中兩列元素出現次數也就是統計A、B兩列的元素的出現情況,只要在groupby()中的by參數添加就可以。
dfs_macd_b.groupby(by=['A','B'])
使用.size()可得到<class 'pandas.core.series.Series'>結構的數據
dfs_macd_a.groupby(by='macd_flag').size()
對StarBucks國家和省份分布進行分組統計:可以在by=后面寫列表。結果是個Series類型的數據,包含country和state/province兩個索引列。因為需要對brand列進行統計,所以后面的統計條件需要使用df['country]和df['state/province]。
grouped=df["brand"].groupby(by=[df['country'],df['state/Province']]).count()
如果是對整個dataframe進行分組,統計條件直接使用country和state/province. 獲取分組后的某一部分數據
grouped=df.groupby(by=['country','state/Province'])['country'].count()
如果需要返回Dataframe數據類型
grouped1=df[['brand']].groupby(by=[df['country'],df['state/Province']])['country'].count() grouped2=groupby(by=[df['country'],df['state/Province']][['brand']].count() grouped3=groupby(by=[df['country'],df['state/Province']].count()[['brand']]
3. 平均值
rating_mean=df['Rating'].mean()
4. 獲取某列中去掉重復值數據並轉換成列表
Directer=df['directer'].unique()
5. 最大值
max_runtime=df['runtime'].max()
6. 獲取最大值索引位置
參考:https://www.cnblogs.com/liulangmao/p/9211537.html
https://baike.baidu.com/item/argmax/6034072?fr=aladdin
max_runtime=df['runtime'].argmax()
7. 分組迭代
當對groupby的列只有單個時(示例根據hobby進行分組),可以 使用 key , value 形式 對分組后的數據進行迭代,其中key 是分組的名稱,value是分組的數據;
1 group = frame['name'].groupby(frame['class']) 2 for key , data in group: 3 print(key) 4 print(data)
當對多個列進行分組迭代時,有多少列則需要指定多少個key與其對應,key可以是任何不重復的變量名稱
1 group = frame['name'].groupby([frame['class'],frame['age']]) 2 for (key1, key2) , data in group: 3 print(key1,key2) 4 print(data)
8. size()和count()的區別