Python 3.x 熊猫:过滤掉包含两个期望值的行(唯一ID)
我有一个如下所示的数据帧Python 3.x 熊猫:过滤掉包含两个期望值的行(唯一ID),python-3.x,pandas,pandas-groupby,Python 3.x,Pandas,Pandas Groupby,我有一个如下所示的数据帧 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
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
和n36
的行(唯一ID)。即
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\u c\u 133 x
。。这是我想要避免的。使用,创建一个布尔掩码m1
和m2
,然后使用groupby
将掩码m1
和m2
分组到df[ID]
,现在使用transform(any)
要创建满足编码条件的布尔掩码,其中ID
同时包含值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]
你能推荐一些我可以学习这些东西的资源吗?我对熊猫数据框架有非常非正式的了解。谢谢。我建议你向熊猫官方文档学习,例如,一个很好的资源。除此之外,使用
groupby、transform、apply
还有一个很好的资源。但是掌握这些概念的唯一方法是将这些学到的概念实际应用到实际数据本身。
# 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