#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 Я никогда не думал о производительности, когда писал это. Мне просто легче писать с более коротким кодом и меньшим количеством кавычек. Но я считаю, что вы правы. 🙂