《python for data analysis》
dataframe可以在其行(axis=0)或列(axis=1)上進行分組。然後,將乙個函式應用到各個分組並產生新值。最後,所有這些函式的執行結果會被合併到最終的結果物件中去。
groupby的size方法可以返回乙個含有分組大小的series。
for (k1,k2), group
in df.groupby(['key1','key2']):
print k1,k2
print
group
df.groupby(['key1','key2'])[['data2']].mean()
只需將字典或series傳給groupby即可。
people.groupby(len).sum()
#根據人名的長度進行分組
層次化索引資料,根據索引級別進行聚合,通過level關鍵字傳入級別編號或名稱。
df.groupby(level='cty',axis=1).count()
經過優化的groupby方法
函式名說明
count
分組中非na值得數量
sum非na值的和
mean
非na值的平均值
median
非na值的算術平均數
std、var
無偏(分母為n-1)標準差和方差
min、max
非na值的最小值和最大值
prod
非na值的積
first、last
第乙個和最後乙個非na值
對於上述描述統計方法,可以將函式名以字串的形式傳入agg方法。例如:grouped.agg(['mean', 'std'])
如果要使用自己的聚合函式,只需將其傳入aggregate或agg方法即可
def
peak_to_peak
(arr):
return arr.max() - arr.min()
grouped.agg(peak_to_peak)
面向列的多函式應用,可以對不同的列使用不同的聚合函式或者一次應用多個函式。
grouped.agg(['mean', 'std', peak_to_peak]) # 1
grouped.agg([('foo', 'mean'), ('bar', np.std)]) # 2
functions = ['count', 'mean', 'max']
result = grouped['tip', 'bill'].agg(functions) # 3
grouped.agg() # 4
transform會將乙個函式應用到各個分組,然後將結果放置到適當的位置上。如果各個分組產生的是乙個標量值,則該值就會被廣播出去。
一般性的「拆分-應用-合併」
根據乙個或多個鍵對資料進行聚合,並根據行和列上的分組鍵將資料分配到各個矩形區域。
tips.pivot_table('tip_pct', index=['time', 'size', 'smoker'],
columns='day', aggfunc='mean', fill_value=0)
引數名說明values
待聚合的列的名稱。預設所有列
rows
用於分組的列名或者其他分組鍵,出現在結果透視表的行
cols
用於分組的列名或者其他分組鍵,出現在結果透視表的列
aggfunc
聚合函式或函式列表,預設「mean」。可以是任何對groupby有效的函式
fill_value
用於替換結果表中缺失值
margins
新增行/列小計和總計,預設為false
是一種用於計算分組頻率的特殊透視表。
pd.crosstab([tips.time, tips.day], tips.smoker, margins=true)
pandas 分組聚合
綜合使用 資料鏈結 統計每個國家的星巴克的數量 按照單字段聚合 codeing utf 8 import pandas as pd import numpy as np df pd.read csv data starbucks store worldwide.csv 按國家進行分組後會有很多列 然...
pandas聚合運算,分組運算
分組運算,先根據一定規則拆分後的資料,然後對資料進行聚合運算,如前面見到的 mean sum 等就是聚合的例子。聚合時,拆分後的第乙個索引指定的資料都會依次傳給聚合函式進行運算。最後再把運算結果合併起來,生成最終結果。先生成乙個dataframe 用key1的索引分類再求平均 df.groupby ...
pandas 高階處理 分組與聚合
分組與聚合通常是分析資料的一種方式,通常與一些統計函式一起使用,檢視資料的分組情況 想一想其實剛才的交叉表與透視表也有分組的功能,所以算是分組的一種形式,只不過他們主要是計算次數或者計算比例!看其中的效果 案例 不同顏色的不同筆的 資料 col pd.dataframe color object p...