Сохранять только значения, сгруппированные по столбцу, которые разделяют значение в другом столбце - PullRequest
1 голос
/ 11 июля 2020

Надеюсь, заголовок не слишком запутан.

У меня есть фрейм данных, и я пытаюсь сохранить только те значения, сгруппированные по 'id', которые имеют одно и то же значение в 'validity'. Другими словами, три строки с id=0 должны сохраняться только в том случае, если соответствующие 3 значения в validity одинаковы (либо все три равны 0, либо все три равны 1).

Еще раз в Другими словами, если три значения, которые имеют общий id, не имеют одинаковых validity, отфильтруйте их.

import pandas as pd
import numpy as np

a = np.repeat(np.arange(6), 3)
b = np.random.choice([0, 1], p=[.15, .85], size=18)
c = np.repeat(['dog', 'cat', 'platypus'], 6)

df = pd.DataFrame(zip(a, b, c), columns=['id', 'validity', 'kind'])
    id  validity      kind
0    0         1       dog
1    0         1       dog
2    0         0       dog
3    1         1       dog # only keep those
4    1         1       dog # only keep those
5    1         1       dog # only keep those
6    2         1       cat
7    2         0       cat
8    2         1       cat
9    3         1       cat
10   3         1       cat
11   3         0       cat
12   4         1  platypus
13   4         0  platypus
14   4         1  platypus
15   5         1  platypus
16   5         0  platypus
17   5         1  platypus

1 Ответ

2 голосов
/ 11 июля 2020

Вы можете фильтровать с помощью nunique и transform:

df = df[df.groupby(['id', 'kind'])['validity'].transform('nunique') == 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...