仅保留按列分组的值,这些值在另一列中共享一个值

时间:2020-07-11 19:15:51

标签: python pandas numpy

我希望标题不要太混乱。

我有一个数据框,我试图仅保留按'id'分组的值,它们在'validity'中共享相同的值。换句话说,只有id=0中对应的三个值相同时(三个全为0,或者三个全为1),才必须保留带有validity的三行。

再次,换句话说,如果共享一个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 个答案:

答案 0 :(得分:2)

您可以使用nuniquetransform进行过滤:

df = df[df.groupby(['id', 'kind'])['validity'].transform('nunique') == 1]