如何在 Pandas 中新增組級彙總統計資訊作為新列?
Pandas 是一個非常流行的資料處理庫,經常用於資料操作和分析。Pandas 庫提供了強大的分析功能,例如分組以分析具有某些共同特徵的各種樣本。在本文中,我們將學習如何將透過樣本組獲得的這些彙總統計資訊作為新列新增到現有的 Pandas 資料框中。
注意 - 本文中的程式碼在 Jupyter Notebook 上執行。
讓我們從匯入 Pandas 開始。
import pandas as pd
示例
以下是我們將要處理的示例資料集。它有 3 列,分別儲存學生姓名、科目名稱以及學生在該科目中的相應分數。我們將找出每個學生分數的各種統計資料。
data = {'name': ['Alice', 'Alice', 'Alice', 'Alice', 'Bob', 'Bob', 'Bob',
'Bob', 'Charlie', 'Charlie', 'Charlie', 'Charlie'],
'subject': ['English', 'Science', 'Maths', 'History', 'English',
'Science', 'Maths', 'History', 'English', 'Science', 'Maths', 'History'],
'score': [87, 92, 78, 65, 76, 89, 91, 81, 90, 85, 88, 93]}
df = pd.DataFrame(data)
df
輸出
name subject score 0 Alice English 87 1 Alice Science 92 2 Alice Maths 78 3 Alice History 65 4 Bob English 76 5 Bob Science 89 6 Bob Maths 91 7 Bob History 81 8 Charlie English 90 9 Charlie Science 85 10 Charlie Maths 88 11 Charlie History 93
我們將首先根據學生的姓名對資料集進行分組,如下所示。
df_grp_name = df.groupby('name')
df_grp_name
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000019F5C3889D0>
這裡 `df_grp_name` 是一個 pandas.DataFrame.groupby 物件,由我們在 `df` 的 `name` 列上進行的分組操作返回。現在我們將新增一個新列來儲存每個學生的最高分,如下所示。
df['max_score'] = df_grp_name['score'].transform('max')
df
name subject score max_score 0 Alice English 87 92 1 Alice Science 92 92 2 Alice Maths 78 92 3 Alice History 65 92 4 Bob English 76 91 5 Bob Science 89 91 6 Bob Maths 91 91 7 Bob History 81 91 8 Charlie English 90 93 9 Charlie Science 85 93 10 Charlie Maths 88 93 11 Charlie History 93 93
這裡我們首先訪問資料框的 `score` 列並應用 `max` 變換。
示例
我們也可以在一行中完成所有這些操作,如下所示 -
df['max_score_2'] = df.groupby('name')['score'].transform('max')
df
輸出
name subject score max_score max_score_2 0 Alice English 87 92 92 1 Alice Science 92 92 92 2 Alice Maths 78 92 92 3 Alice History 65 92 92 4 Bob English 76 91 91 5 Bob Science 89 91 91 6 Bob Maths 91 91 91 7 Bob History 81 91 91 8 Charlie English 90 93 93 9 Charlie Science 85 93 93 10 Charlie Maths 88 93 93 11 Charlie History 93 93 93
注意 - 我們還可以使用點表示法訪問列,如下所示。
df['max_score_3'] = df.groupby('name').score.transform('max')
df
name subject score max_score max_score_2 max_score_3 0 Alice English 87 92 92 92 1 Alice Science 92 92 92 92 2 Alice Maths 78 92 92 92 3 Alice History 65 92 92 92 4 Bob English 76 91 91 91 5 Bob Science 89 91 91 91 6 Bob Maths 91 91 91 91 7 Bob History 81 91 91 91 8 Charlie English 90 93 93 93 9 Charlie Science 85 93 93 93 10 Charlie Maths 88 93 93 93 11 Charlie History 93 93 93 93
示例
以上是新增單個或幾個統計值的好方法。但是,它很快就會變得乏味,所以讓我們看看如何一次新增多個統計資訊!現在讓我們重新建立我們的原始資料集。
df = pd.DataFrame(data)
讓我們找出我們想要找到的不同統計值,如下所示。
df_agg = df.groupby(['name'])['score'].agg([min, max]) df_agg
輸出
name min max Alice 65 92 Bob 76 91 Charlie 85 93
這裡我們首先按 `name` 列對 `df` 進行分組並聚合不同的 `min` 和 `max` 值。我們可以看到我們有一個新的資料框,其中儲存了所有聚合的值。
示例
現在我們將對我們的原始資料框和此資料框進行“連線”操作,以合併統計摘要。我們可以這樣做 -
df = pd.merge(df, df_agg, on='name', how='left') df
輸出
name subject score min max 0 Alice English 87 65 92 1 Alice Science 92 65 92 2 Alice Maths 78 65 92 3 Alice History 65 65 92 4 Bob English 76 76 91 5 Bob Science 89 76 91 6 Bob Maths 91 76 91 7 Bob History 81 76 91 8 Charlie English 90 85 93 9 Charlie Science 85 85 93 10 Charlie Maths 88 85 93 11 Charlie History 93 85 93
這裡我們使用了 Pandas 的 `merge` 方法,並且我們正在根據 `name` 列進行連線(即行根據此列進行匹配),並且我們已將連線型別指定為左連線。
結論
本文向我們介紹了幾種將彙總統計資訊作為新列新增到 Pandas 資料框中的方法。我們看到了如何新增單個統計資訊以及如何一次新增多個統計資訊。您現在可以在您的專案和不同的應用程式中使用您剛剛學到的知識。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP