我有一个如下的数据框;
ID code
333_c_132 x
333_c_132 n06
333_c_132 n36
333_c_132 n60
999_c_133 x
999_c_133 n06
999_c_133 n12
999_c_133 n24
998_c_134 x
998_c_134 n06
998_c_134 n12
998_c_134 n18
998_c_134 n36
997_c_135 x
997_c_135 n06
997_c_135 n12
997_c_135 n24
997_c_135 n36
我想过滤出同时包含x
和的行(唯一ID)n36
。即
ID code
333_c_132 x
333_c_132 n36
998_c_134 x
998_c_134 n36
997_c_135 x
997_c_135 n36
我像这样吼叫
df = df[(df.code == "x") | (df.code == "n36")]
但它也返回999_c_133 x
..我想避免。
使用,Series.eq
以产生一个布尔掩码m1
&m2
然后使用groupby
到组掩模m1
&m2
上df[ID]
,现在使用transform(any)
以创建布尔掩码满足其中的coditionID
包含这两个值m1
和m2
,使用该掩模之后过滤数据帧:
m1 = df['code'].eq('x')
m2 = df['code'].eq('n36')
m = (
m1.groupby(df['ID']).transform('any') &
m2.groupby(df['ID']).transform('any') &
df['code'].isin(['x', 'n36'])
)
df1 = df[m]
# print(df1)
ID code
0 333_c_132 x
2 333_c_132 n36
8 998_c_134 x
12 998_c_134 n36
13 997_c_135 x
17 997_c_135 n36
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句