считать уникальные значения в группах pandas - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть такой фрейм данных:

data = {'id': [1,1,1,2,2,3],
        'value': ['a','a','a','b','b','c'],
        'obj_id': [1,2,3,3,3,4]
}
df = pd.DataFrame (data, columns = ['id','value','obj_id'])

Я хотел бы получить уникальные значения obj_id groupby id и value:

1 a 3
2 b 1
3 c 1

Но когда я делаю:

result=df.groupby(['id','value'])['obj_id'].nunique().reset_index(name='obj_counts')

результат, который я получил, был:

1 a 2
1 a 1
2 b 1
3 c 1

, поэтому первые две строки с одинаковыми id и value не группируются вместе.

Как я могу это исправить? Большое спасибо!

1 Ответ

1 голос
/ 20 февраля 2020

Для меня ваше решение хорошо работает с примерами данных.

Как упомянуто в комментариях @YOBEN_S, возможна проблема с подсчетом пробелов, тогда решение будет добавлено Series.str.strip:

data = {'id': [1,1,1,2,2,3],
        'value': ['a ','a','a','b','b','c'],
        'obj_id': [1,2,3,3,3,4]
}
df = pd.DataFrame (data, columns = ['id','value','obj_id'])

df['value'] = df['value'].str.strip()
df = df.groupby(['id','value'])['obj_id'].nunique().reset_index(name='obj_counts')
print (df)
   id value  obj_counts
0   1     a           3
1   2     b           1
2   3     c           1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...