Dataframe groupby и значение count удовлетворяют условиям

#python #pandas #dataframe

#python #панды #dataframe

Вопрос:

Это фрейм данных, который у меня есть под рукой:

 df = pd.DataFrame({
    'id': [1,1,1,2,2,3,3],
    'length': [20, 20, 20, 4, 4, 15,15],
    'speed': [17.2,16.5,18, 2.3,2.1,10,9.8]
})

df
    id  length  speed
0   1    20     17.2
1   1    20     16.5
2   1    20     18.0
3   2     4     2.3
4   2     4     2.1
5   3    15     10.0
6   3    15     9.8
  

Я хочу посчитать уникальные id значения, которые length меньше 5.

 df[df['length']<5].groupby('id')['length'].value_counts()
id  length
2   4         2
Name: length, dtype: int64
  

Как мне просто получить общий идентификатор длиной менее 5? что-то вроде:

 df[where df.length<5]
1
  

Ответ №1:

Просто используйте nunique после фильтра:

 df[df.length < 5].id.nunique()
# 1
  

Комментарии:

1. Здесь более идиоматично использовать loc вместо цепочки: df.loc[df['length']<5, 'id'].nunique()

2. Серьезно ..! Мне это нравится.

3. @Erfan Я никогда не думал о производительности, когда писал это. Мне просто легче писать с более коротким кодом и меньшим количеством кавычек. Но я считаю, что вы правы. 🙂