在DataFrames中,
item_#, status, field1, field2
123, "A", "val1", "val2"
223, "B", "val3", "val4"
123, "B", "val5", "val6"
323, "A", "val7", "val8"
我想要的是状态为item_#
和状态为"A"
的{{1}}列表。
像"B"
)这样的东西,但这实际上并不起作用。它为我提供了列表中任何一个值的所有项目。
任何建议都将不胜感激!
答案 0 :(得分:2)
您可以使用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
更新方法
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
答案 1 :(得分:0)
您可以使用set
:
df[df.groupby('item_#')['status']
.transform(lambda x: set(x.values.tolist()) == {'A','B'})]
输出:
item_ #status field1 field2
0 123 A val1 val2
2 123 B val5 val6
答案 2 :(得分:0)
你也可以使用unstack,dropna和stack:
df.groupby(['item_#','status']).first().unstack().dropna().stack()
Out[136]:
field1 field2
item_# status
123 "A" "val1" "val2"
"B" "val5" "val6"