поиск групп, которые удовлетворяют условию в группе панд - PullRequest
3 голосов
/ 20 марта 2019

Это мой фрейм данных:

df = pd.DataFrame({'a':list('xxxyyzz'), 'b':[10,20,30,5,3,1,2]})

Я группирую их:

groups = df.groupby('a')

Я хочу напечатать группы, у которых есть хотя бы одна b выше 20. В этом случае я хочу напечатать x. Это мой желаемый результат:

x
   a   b
0  x  10
1  x  20
2  x  30

Ответы [ 3 ]

4 голосов
/ 20 марта 2019

Вы можете проверить, какие значения выше 20, GroupBy столбец a и transform с помощью any, чтобы выбрать только те группы, в которых хотя бы одинстрока, удовлетворяющая условию:

df[df.b.gt(20).groupby(df.a).transform('any')]

   a   b
0  x  10
1  x  20
2  x  30
4 голосов
/ 20 марта 2019

Нет необходимости groupby, просто сделайте isin

df[df.a.isin(df.loc[df.b>20,'a'])]
Out[996]: 
   a   b
0  x  10
1  x  20
2  x  30
4 голосов
/ 20 марта 2019

Сравните значения по Series.gt, сгруппировав по a столбцу, как Series - df['a'], и используйте GroupBy.transform с GroupBy.any для тестирования не менее одного True на группы:

df1 = df[df['b'].gt(20).groupby(df['a']).transform('any')]
print (df1)
   a   b
0  x  10
1  x  20
2  x  30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...