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']
),但这实际上不起作用。它让我获得列表中任一值的所有项目。
任何建议将不胜感激!
您可以使用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)