计数 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