我希望标题不要太混乱。
我有一个数据框,我试图仅保留按'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
答案 0 :(得分:2)
您可以使用nunique
和transform
进行过滤:
df = df[df.groupby(['id', 'kind'])['validity'].transform('nunique') == 1]