Pandas GroupBy - показывать только группы с более чем одним уникальным значением - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть DataFrame df_things, который выглядит следующим образом, и я хочу предсказать качество классификации перед тренировкой

A    B     C      CLASS
-----------------------
al1  bal1  cal1   Ship
al1  bal1  cal1   Ship
al1  bal2  cal2   Ship
al2  bal2  cal2   Cow
al3  bal3  cal3   Car
al1  bal2  cal3   Car
al3  bal3  cal3   Car

Я хочу сгруппировать строки по классам, чтобы у меня было представление ораспределение функций.Я делаю это с (например, на столбце «B»),

df_B = df_things.groupby('CLASS').B.value_counts()

, что дает мне результаты

CLASS  B 
-------------
ship   bal1  2 
       bal2  1
cow    bal2  2
car    bal2  1
       bal3  2

Я хочу визуализировать только те группы, которые имеютболее чем одно значение, чтобы это выглядело так:

CLASS  B 
-------------
ship   bal1  2 
       bal2  1
car    bal2  1
       bal3  2

Я немного застрял, так что есть идеи?

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Раствор от crosstab

s=pd.crosstab(df.CLASS,df.B)
s[s.ne(0).sum(1)>1].replace(0,np.nan).stack()
CLASS  B   
Car    bal2    1.0
       bal3    2.0
Ship   bal1    2.0
       bal2    1.0
dtype: float64
0 голосов
/ 30 декабря 2018

Вы можете использовать groupby для фильтрации групп, у которых число nunique превышает 1.

v = df_things.groupby('CLASS').B.value_counts()
v[v.groupby(level=0).transform('nunique').gt(1)]

CLASS  B   
Car    bal3    2
       bal2    1
Ship   bal1    2
       bal2    1
Name: B, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...