Pandas 中的 GroupBy 應用
本教程旨在探索 Pandas 中的 GroupBy Apply
概念。Pandas 在 Python 中用作高階資料分析工具或包擴充套件。
當我們在 SQL 表、電子表格或異構列中有資料時,強烈建議使用 Pandas。資料可以有序也可以無序,還支援時序資料。
Pandas GroupBy-Apply 行為
讓我們嘗試瞭解如何按資料分組,然後應用特定函式來聚合或計算資料的值。GroupBy
幫助我們將某些資料條目組合或彙集在一起。
GroupBy
幫助我們跟蹤資料中的不同資料入口點。讓我們看看這個方法的實際效果。
我們將建立一個虛擬 DataFrame 來使用。在這裡,我們建立了一個 DataFrame dframe
和幾行。
from pandas import *
our_data = {"mylabel": Series(["P", "R", "E", "E", "T", "S", "A", "P", "R", "E", "T"])}
dframe = DataFrame(our_data)
print(dframe) # print output
輸出:
mylabel
0 P
1 R
2 E
3 E
4 T
5 S
6 A
7 P
8 R
9 E
10 T
我們的 DataFrame 帶有標籤 mylabel
,並設定了不同的資料點和索引。每個字母都被分配了一個特定的索引。
這些標籤是我們將學習如何分組和應用某些聚合函式的東西。
在 Pandas 中使用 groupby()
函式
我們可以藉助以下程式碼瞭解如何對資料進行分組。正如我們所看到的,我們正在嘗試對每個字母進行分組並計算它們的出現次數。
from pandas import *
our_data = {"mylabel": Series(["P", "R", "E", "E", "T", "S", "A", "P", "R", "E", "T"])}
dframe = DataFrame(our_data)
def perc(value, total):
return value / float(total)
def gcou(values):
return len(values)
grpd_count = dframe.groupby("mylabel").mylabel.agg(gcou)
print(grpd_count) # prints output
輸出:
mylabel
A 1
E 3
P 2
R 2
S 1
T 2
Name: mylabel, dtype: int64
我們需要使用我們建立的名為 grpd_count
的新 DataFrame 來應用任何數學公式。在這裡,我們計算了可用的每個字母表的數量。
在 Pandas 中加入 groupby()
和 apply()
函式
讓我們操作 DataFrame grpd_count
以將每個字母的總計數除以所有計數的總和。這個想法通常用於衡量一個實體在 0 到 1
範圍內的權重。
接近 1 的值具有較高的權重,而接近於 0 的值具有較低的權重,這意味著該特定字母的出現次數少於其他字母。
程式碼示例:
from pandas import *
our_data = {"mylabel": Series(["P", "R", "E", "E", "T", "S", "A", "P", "R", "E", "T"])}
dframe = DataFrame(our_data)
def perc(value, total):
return value / float(total)
def gcou(values):
return len(values)
grpd_count = dframe.groupby("mylabel").mylabel.agg(gcou)
mydata = grpd_count.apply(perc, total=dframe.mylabel.count())
print(mydata) # prints output
輸出:
mylabel
A 0.090909
E 0.272727
P 0.181818
R 0.181818
S 0.090909
T 0.181818
Name: mylabel, dtype: float64
在 Pandas 中對資料進行分組後,我們已經成功執行了一項操作。
因此,藉助 Pandas 中的 Grouping By
技術,我們可以根據我們的需求以及在需要時並基於一個或多個條件有效地過濾資料,然後將某些函式或聚合應用於結果。