pandas 在 groupby 之后选择行

use*_*312 5 pandas pandas-groupby

在数据框中,

 item_#, status, field1, field2 
   123,    "A",    "val1", "val2"
   223,    "B",    "val3", "val4"
   123,    "B",    "val5", "val6"
   323,    "A",    "val7", "val8"
Run Code Online (Sandbox Code Playgroud)

item_#我想要的是同时具有 status"A"和 status的列表"B"。类似df.groupby('item_#')[(df.status.isin(['A', 'B']),但这实际上不起作用。它让我获得列表中任一值的所有项目。

任何建议将不胜感激!

WeN*_*Ben 6

您可以使用filter+isin

df.groupby('item_#').filter(lambda x : pd.Series(['A','B']).isin(x['status']).all())
Out[473]: 
   item_# status field1 field2
0     123      A   val1   val2
2     123      B   val5   val6
Run Code Online (Sandbox Code Playgroud)

更新方法

df[df.groupby('item_#').status.transform(lambda x : {'A','B'}.issubset(set(x)))]
   item_# status field1 field2
0       1      A   val1   val2
2       1      B   val5   val6
Run Code Online (Sandbox Code Playgroud)