iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
佛心分享-讓我升級的那些書

菜雞學習 pandas 的 30 日讀書分享系列 第 29

菜雞學習 pandas 的 30 日讀書分享【Day 29】唯一值、值的數量以及成員資格

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250828/20168290gYi4lyfzgj.jpg

唯一值、值的數量以及成員資格

有一類相關的方法可以提取關於一維 Series 的值資訊:

In [290]: obj = pd.Series(["c", "a", "d", "a", "a", "b", "b", "c", "c"])

unique()可以提供在 Series 裡的不重複值陣列:

In [291]: uniques = obj.unique()

In [292]: uniques
Out[292]: array(['c', 'a', 'd', 'c'], dtype=object)

不重複的值不一定按照初次的順序來回傳,也不會按照排序順序排序,但如果需要也可以在事後進行排序 uniques.sort()value_counts() 是相關的函式,會算一個包含值的頻率 Series:

In [293]: obj.value_counts()
Out[293]:
c    3
a    3
b    2
d    1
dtype: int64

為了方便起見,Series 會按值降序排序,value_counts() 也可以當成頂級的 pandas 方法,可以和 NumPy 陣列或其他 Python 序列一起使用:

In [294]: pd.value_counts(obj.to_numpy(), sort=False)
Out[294]:
c    3
a    3
d    1
b    2
dtype: int64

isin() 可以使用向量化的方式檢查項目是不是成員,適合用來從一個資料組篩選出屬於 Series 的值或 DataFrame 的欄子集合:

In [295]: obj
Out[295]:
0    c
1    a
2    d
3    a
4    a
5    b
6    b
7    c
8    c
dtype: object

In [296]: mask = obj.isin(["b", "c"])

In [297]: mask
Out[297]:
0     True
1    False
2    False
3    False
4    False
5     True
6     True
7     True
8     True
dtype: bool

In [298]: obj[mask]
Out[298]:
0    c
5    b
6    b
7    c
8    c
dtype: object

Index.get_indexer() 是與 isin() 相關的方法,可以產生一個陣列的值(值有可能相同),在另一個陣列(值不相同)裡的索引,結果會是一個陣列:

In [299]: to_match = pd.Series(["c", "a", "b", "b", "c", "c"])

In [300]: unique_vals = pd.Series(["c", "b", "a"])

In [301]: indices = pd.Index(unique_vals).get_indexer(to_match)

In [302]: indices
Out[302]: array([0, 2, 1, 0, 2])

以下為檢查唯一性、計算值數量以及檢查是否為集合成員的方法:

isin() :計算一個布林陣列,指出 Series 或 DataFrame 的每一個值是否出現在傳入的值序列裡。
get_indexer() :計算整數索引,指出一個陣列的每個值在另一個陣列內的哪個位置,可協助進行資料對齊與連接類型操作。
unique() :為一個 Series 算出不相同值組成的陣列,按照看到的順序回傳。
value_counts() 回傳一個 Series,索引為互不相同的值,值是索引值的頻率,按照數量降序排序。

今日的分享就到這囉,我們明天見,掰掰!


上一篇
菜雞學習 pandas 的 30 日讀書分享【Day 28】總結與計算描述性統計數據
下一篇
菜雞學習 pandas 的 30 日讀書分享【Day 30】資料載入
系列文
菜雞學習 pandas 的 30 日讀書分享30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言