Получить всех клиентов, которые имеют несколько указанных значений c в столбце - PullRequest
2 голосов
/ 25 февраля 2020

Как я могу это сделать ?:

Получить всех клиентов, которые дали как имя (имя_кличка), так и день рождения.

df = pd.DataFrame({
     'customer_ID': ['a','a', 'a', 'b', 'c', 'c', 'c', 'd', 'd'],
     'parameter': ['name_fist', 'name_last', 'birthday', 'name_fist', 
                   'name_fist', 'name_last', 'birthday', 'name_fist', 'name_last']})

customer_ID   parameter
0   a    name_fist
1   a    name_last
2   a    birthday
3   b    name_fist
4   c    name_fist
5   c    name_last
6   c    birthday
7   d    name_fist
8   d    name_last

Ответ должен быть "2".

В идеале я получаю идентификатор клиента для всех людей, для которых выполняется это условие: a и c

Ответы [ 2 ]

3 голосов
/ 25 февраля 2020

Вы можете попробовать что-то вроде этого:

(df.query('parameter in ["name_fist", "birthday"]')\
   .groupby('customer_ID')['parameter'].nunique() == 2)

Вывод:

customer_ID
a     True
b    False
c     True
d    False
Name: parameter, dtype: bool

Подробности:

Сначала отфильтруйте кадр данных по интересующим параметрам, используя query, затем groupby и используйте nunique для подсчета параметров.

2 голосов
/ 25 февраля 2020

Один из способов - groupby customer_ID, а затем проверить по set.issuperset (обратите внимание, что вместо «first» у вас есть опечатка «name_fist»:

print (df.groupby("customer_ID")["parameter"]
       .apply(lambda d: set(d).issuperset({"name_fist","birthday"})))

#
customer_ID
a     True
b    False
c     True
d    False
Name: parameter, dtype: bool
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...