python資料分析之 資料聚合與分組運算

2022-05-30 21:30:27 字數 4364 閱讀 6313

在資料庫中,我們可以對資料進行分類,聚合運算。例如groupby

操作。在

pandas

中同樣也有類似的功能。通過這些聚合,分組操作,我們可以很容易的對資料進行轉換,清洗,運算。比如如下圖,首先通過不同的鍵值進行分類,然後對各個分類進行求和運算。

我們來看實際的例子,首先生成一組資料如下

df=dataframe()

data1     data2 key1 key2

0  0.426519  0.321085    a  one

1  0.918215  0.418922    a  two

2 -2.792968  0.629589    b  one

3 -0.431760  0.231652    b  two

4  0.570083 -0.799304    a  one

然後針對data1

列根據key1

的值來進行分組

groupd=df['data1'].groupby(df['key1'])

得到groupd

只是乙個聚合的物件,我們可以在這個物件上進行各種運算。比如

groupd.mean(), groupd.sum()

分別代表平均數,求和。結果如下,生成了乙個新的資料列,且列名還是

key1

key1

a    0.146577

b   -0.947097

name: data1, dtype: float64

key1

a    0.439730

b   -1.894193

name: data1, dtype: float64

在groupby

中還可以傳遞多個陣列,比如

groupd1=df['data1'].groupby([df['key1'],df['key2']]).sum()

結果如下:通過key1

列進行聚合後,在通過

key2

列對之前的資料再聚合

. 然後求和。

key1  key2

a     one    -0.115901

two    -0.030998

b     one    -0.039265

two     0.295743

name: data1, dtype: float64

當然還可以將列名也用作分組鍵。

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

data1     data2

key1                    

a     0.381235  0.453622

b    -0.179429 -0.880869

df.groupby([df['key1'],df['key2']]).mean()

data1     data2

key1 key2                    

a    one   0.466122  0.328501

two   0.211462  0.703865

b    one   0.848630 -0.598706

two  -1.207488 -1.163033

通過上面的結果可以看到通過key1

進行分組的時候

key2

列是不存在的,這是因為

key2

列不是整數資料。所以從結果中排除了。

對元組進行迭代

前面通過df.groupby(df[『key1』])

進行分組的時候,我們其實得到了兩類分組,一種是

a的分組,一種是

b的分組。因為在

key1

列中只有這

2個值,如果我們想分別訪問這兩組分組的資料,就需要用到迭代了。

for group1,group2 in df.groupby(df['key1']):

print group1,group2

這樣就分別得到了針對a,b

的各自分組。

a       data1     data2 key1 key2

0 -0.973337  0.656690    a  one

1  0.930285 -2.361232    a  two

4 -0.195729 -0.717847    a  one

b       data1     data2 key1 key2

2 -0.167785 -0.907817    b  one

3 -2.245887 -0.170275    b  two

對於多列的分組:

for group1,group2 in df.groupby([df['key1'],df['key2']]):

print group1

print group2

結果如下,總共有4

個分組。分別是

(『a』,』one』),(『a』,』two』),(『b』,』one』),(『b』,』two』)

('a', 'one')

data1     data2 key1 key2

0 -0.430579 -0.810844    a  one

4  0.481271 -0.998662    a  one

('a', 'two')

data1     data2 key1 key2

1 -0.114657  1.062592    a  two

('b', 'one')

data1     data2 key1 key2

2 -0.996202  0.661732    b  one

('b', 'two')

data1    data2 key1 key2

3  0.812372 -1.09057    b  two

下面總結一下groupby

的聚合運算的方法:

首先在group_by_test

中,通過

pd.cut

將frame進行4

分位分隔。然後對各個分位進行聚合。最後通過

函式對各個分組呼叫

get_stats

函式。這個函式的作用和下面的**的作用是一樣的。

for g in frame.data2.groupbyby(facotr):

get_stats(g)

隨機取樣和排列:

假設想要從乙個大資料集中隨機抽樣樣本進行分析工作。np.random.permutation(n)

選取前k

個元素, 其中n

為完整資料的大小,

k為期望的樣本大小。下面舉乙個撲克牌的例子

def draw(deck,n=5):

return deck.take(np.random.permutation(len(deck))[:n])

def group_by_test2():

card_val=(range(1,11)+[10]*3)*4  #牌的序號 

base_name=['a']+range(2,11)+['j','k','q'] #牌名

cards=

suits=['h','s','c','d'] #花色:紅桃

(hearts)

,黑桃(spades),

梅花(clubs)

,方片(diamonds)

for suit in ['h','s','c','d']:

cards.extend(str(num)+suit for num in base_name) #產生牌

deck=series(card_val,index=cards)

get_suit=lambda card:card[-1] #根據牌名最後乙個字元也就是花色進行分組。

執行結果:

c  8c     8

9c     9

d  kd    10

qd    10

h  5h     5

9h     9

s  7s     7

js    10

dtype: int64

Python資料分析之資料清洗

good data decides good analyse 資料清洗,是資料分析中不可缺少的乙個環節,其處理的好壞在很大程度上影響著資料分析的結果。而且以前聽老師說過資料清洗佔整個的資料分析的一半時間以上 汗。資料清洗也是乙個大學問啊 首先讀入檔案 我們可以看出有乙個nan,李四的數學成績也是不符...

Python之資料分析(寶可夢資料分析)

在此感謝阿里雲天池平台提供的學習平台,並提供相應的教程供小白們學習資料分析。seaborn庫 seaborn 是基於 python 且非常受歡迎的圖形視覺化庫,在 matplotlib 的基礎上,進行了更高階的封裝,使得作圖更加方便快捷。即便是沒有什麼基礎的人,也能通過極簡的 做出具有分析價值而又十...

python資料分析之Numpy

numpy系統是python的一種開源的數值計算擴充套件 ndarray 多維陣列 所有元素必須是相同型別 ndim屬性,維度個數 shape屬性,各維度大小 dtype屬性,資料型別 coding utf 8 import numpy as np 生成指定維度的隨機多維資料 data np.ran...