Hits: 178
問題說明
在工作上,我需要找出欄位具有多種值的資料列,用文字很難表達,以下用範例來說明。
我的資料有 NO 與 CODE ,我的目標是找出具有多種值的 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
詳解
- 把資料
groupby
起來後,取出 CODE 這個欄位,執行filter
指令。 - 在
filter
指令中的nunique
function ,可以計算獨特值 (distinct) 出現的次數,這邊用>1
表示我要找的 CODE 值是多種的 (4 與 1)。 - 取出步驟2的位置屬性 (index) 後,將 index 丟入資料並使用
iloc
屬性進行資料切割,拿到我的結果。
Comments