Панды, как вывести отдельные значения в столбце на основе дубликата в другом столбце - PullRequest
0 голосов
/ 04 октября 2019

Вот пример:

import pandas as pd
df = pd.DataFrame({
    'product':['1','1','1','2','2','2','3','3','3','4','4','4','5','5','5'],
    'value':['a','a','a','a','a','b','a','b','a','b','b','b','a','a','a']
})

      product value
0        1     a
1        1     a
2        1     a
3        2     a
4        2     a
5        2     b
6        3     a
7        3     b
8        3     a
9        4     b
10       4     b
11       4     b
12       5     a
13       5     a
14       5     a

Мне нужно вывести:

1 a
4 b
5 a

Поскольку значения 'value' для различных значений 'product' все одинаковы, извините за плохойанглийский

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Я думаю, вам нужно это

m=df.groupby('product')['value'].transform('nunique')
df.loc[m==1].drop_duplicates(). reset_index(drop=True)

Вывод

   product  value
0   1        a
1   4        b
2   5        a

Подробности df.groupby('product')['value'].transform('nunique') возвращает серию, как показано ниже

0     1
1     1
2     1
3     2
4     2
5     2
6     2
7     2
8     2
9     1
10    1
11    1
12    1
13    1
14    1

где номера числа уникальных значений в каждой группе. Затем мы используем df.loc, чтобы получить только строки, в которых это значение равно 1, то есть группы с уникальными значениями.

Мы отбрасываем дубликаты, поскольку вам нужна только группа и ее уникальное значение.

0 голосов
/ 04 октября 2019

Если я правильно понимаю ваш вопрос, этот простой код для вас:

distinct_prod_df = df.drop_duplicates(['product'])

и дает:

   product value
0        1     a
3        2     a
6        3     a
9        4     b
12       5     a
0 голосов
/ 04 октября 2019

Вы можете попробовать это:

mask = df.groupby('product').apply(lambda x: x.nunique() == 1)
df = df[mask].drop_duplicates()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...