1. 程式人生 > >DataFrame的groupby()函式

DataFrame的groupby()函式

groupby()是一個分組函式,對資料進行分組操作的過程可以概括為:split-apply-combine三步:
1.按照鍵值(key)或者分組變數將資料分組。
2.對於每組應用我們的函式,這一步非常靈活,可以是python自帶函式,可以是我們自己編寫的函式。
3.將函式計算後的結果聚合。
在這裡插入圖片描述
舉例:

df = pd.DataFrame({'key1':list('aabba'),
                  'key2': ['one','two','one','two','one'],
                  'data1': [8,6,2,4,3],
                  'data2'
: [6,9,5,2,-7]}) print df

輸出:

   data1  data2 key1 key2
0      8      6    a  one
1      6      9    a  two
2      2      5    b  one
3      4      2    b  two
4      3     -7    a  one

下面這兩句效果是一樣的。

df.groupby('key1',as_index=False).mean()
df.groupby(['key1'],as_index=False).mean()

輸出:

  key1     data1     data2
0
a 5.666667 2.666667 1 b 3.000000 3.500000

注意groupby之後的資料型別,它不再是一個dataframe,而是一個GroupBy物件,我們後面函式的任何操作都是基於這個物件的。
剛剛我們只是用了key1進行了分組,我們也可以使用兩個分組變數:

df.groupby(['key1','key2']).mean()
print '-----------------'
df.groupby(['key1','key2'],as_index=False).mean()

輸出:

           data1  data2
key1 key2              
a    one     5.5
-0.5 two 6.0 9.0 b one 2.0 5.0 two 4.0 2.0 ----------------- key1 key2 data1 data2 0 a one 5.5 -0.5 1 a two 6.0 9.0 2 b one 2.0 5.0 3 b two 4.0 2.0

從上面可以看出,as_index=False與預設的True的區別來,加入as_index=False 屬性是"SQL-style"的分組輸出。

實際上分組鍵可以是任何長度適當的陣列

states=np.array(['Ohio','California','California','Ohio','Ohio'])
years=np.array([2005,2005,2006,2005,2006])
print df['data1'].groupby([states,years]).mean()

把data1列按照states和years分組,輸出:

California  2005    6
            2006    2
Ohio        2005    6
            2006    3

注意,像下面這麼寫是錯誤的:

print df['data1'].groupby(['key1']).mean()

如果前面是df[‘data1’]的形式,後面要這樣寫:

print df['data1'].groupby(df['key1']).mean()

輸出:

key1
a    5.666667
b    3.000000
Name: data1, dtype: float64

這麼寫也是可以的,輸出和上面一樣:

print  df.groupby(['key1'])['data1'].mean()