[python] 找出欄位具有多種值的資料列

點閱: 59

問題說明

在工作上,我需要找出欄位具有多種值的資料列,用文字很難表達,以下用範例來說明。

我的資料有 NOCODE ,我的目標是找出具有多種值的 CODE 資料列。

import pandas as pd

df = pd.DataFrame({'NO': ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd', 'e', 'e', 'e', 'f', 'f'], 'CODE': ['1', '1', '1', '1', '4', '1', '4', '1', '4', '4', '1', '4', '1']})

Out[1]: 
   NO CODE
0   a    1
1   a    1
2   b    1
3   b    1
4   c    4
5   c    1
6   d    4
7   d    1
8   e    4
9   e    4
10  e    1
11  f    4
12  f    1

我預期的結果如下:

NO CODE
c  4
c  1
d  4
d  1
e  4
e  4
e  1
f  4
f  1

解法

stack overflow 上發問,得到了一個解答,這邊紀錄一下解法。

check = df.groupby('NO').CODE.filter(lambda x: x.nunique() > 1).index

df.iloc[check]

    NO  CODE
4   c   4
5   c   1
6   d   4
7   d   1
8   e   4
9   e   4
10  e   1
11  f   4
12  f   1

詳解

  1. 把資料 groupby 起來後,取出 CODE 這個欄位,執行 filter 指令。
  2. filter 指令中的 nunique function ,可以計算獨特值 (distinct) 出現的次數,這邊用 >1 表示我要找的 CODE 值是多種的 (4 與 1)。
  3. 取出步驟2的位置屬性 (index) 後,將 index 丟入資料並使用 iloc 屬性進行資料切割,拿到我的結果。

About the Author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts