計數 Pandas 中每組的唯一值

Ahmed Waheed 2023年1月30日 2020年6月9日
  1. df.groupby().nunique() 方法
  2. df.groupby().agg() 方法
  3. df.groupby().unique() 方法
計數 Pandas 中每組的唯一值

當我們處理大型資料集時,有時我們必須將某些功能應用於特定的資料組。例如,我們有一個國家資料集和用於私人事務的私人程式碼資料集。我們要計算一個國家使用的程式碼數量。下面列出了計數唯一值的不同方法。

  1. df.groupby().nunique() 方法
  2. df.groupby().agg() 方法
  3. df.groupby().unique() 方法

在以下各節中,我們將使用相同的 DataFrame,如下所示:

import pandas as pd
data = [
    [999,
     'Switzerland'],
    [113,
     'Switzerland'],
    [112,
     'Japan'],
    [112,
     'Switzerland'],
    [113,
     'Canada'],
    [114,
     'Japan'],
    [100,
     'Germany'],
    [114,
     'Japan'],
    [115,
     'Germany']
]
df = pd.DataFrame(data, columns=["code","Countries"])
print(df)

以下是輸出。

   code    Countries
0   999  Switzerland
1   113  Switzerland
2   112        Japan
3   112  Switzerland
4   113       Canada
5   114        Japan
6   100      Germany
7   114        Japan
8   115      Germany

df.groupby().nunique() 方法

讓我們看看 df.groupby().nunique() 函式如何對我們的國家進行分組。

import pandas as pd
data = [
    [999,
     'Switzerland'],
    [113,
     'Switzerland'],
    [112,
     'Japan'],
    [112,
     'Switzerland'],
    [113,
     'Canada'],
    [114,
     'Japan'],
    [100,
     'Germany'],
    [114,
     'Japan'],
    [115,
     'Germany']
]

df = pd.DataFrame(data, columns=["code","Countries"])
result = df.groupby('Countries')['code'].nunique()
print(result)

輸出:

Countries
Canada         1
Germany        2
Japan          2
Switzerland    3
Name: code, dtype: int64

這表明加拿大使用的是一個程式碼,德國使用的是兩個程式碼,依此類推。

df.groupby().agg() 方法

該方法與 df.groupby().nunique() 相同。我們需要將 nunique() 函式傳遞給 agg() 函式。

import pandas as pd
data = [
    [999,
     'Switzerland'],
    [113,
     'Switzerland'],
    [112,
     'Japan'],
    [112,
     'Switzerland'],
    [113,
     'Canada'],
    [114,
     'Japan'],
    [100,
     'Germany'],
    [114,
     'Japan'],
    [115,
     'Germany']
]
df = pd.DataFrame(data, columns=["code","Countries"])
result = df.groupby(by='Countries', as_index=False).agg({'code': pd.Series.nunique})
print(result)

輸出:

     Countries  code
0       Canada     1
1      Germany     2
2        Japan     2
3  Switzerland     3
.agg({'code': pd.Series.nunique})

它使用 pd.Series.nunique 函式對列 code 進行聚集。

df.groupby().unique() 方法

當你想檢視哪個國家使用哪些程式碼時,此方法很有用。

import pandas as pd
data = [
    [999,
     'Switzerland'],
    [113,
     'Switzerland'],
    [112,
     'Japan'],
    [112,
     'Switzerland'],
    [113,
     'Canada'],
    [114,
     'Japan'],
    [100,
     'Germany'],
    [114,
     'Japan'],
    [115,
     'Germany']
]
result = df.groupby('Countries')["code"].unique()
print(result)

輸出:

Countries
Canada                   [113]
Germany             [100, 115]
Japan               [112, 114]
Switzerland    [999, 113, 112]
Name: code, dtype: object

相關文章 - Pandas DataFrame