pandas:按多种条件过滤组?

Ric*_*ard 8 python filter multiple-conditions pandas

我有一个如下所示的数据框:

df = pd.DataFrame([
  {'id': 123, 'date': '2016-01-01', 'is_local': True },
  {'id': 123, 'date': '2017-01-01', 'is_local': False },
  {'id': 124, 'date': '2016-01-01', 'is_local': True },
  {'id': 124, 'date': '2017-01-01', 'is_local': True }
])
df.date = df.date.astype('datetime64[ns]')
Run Code Online (Sandbox Code Playgroud)

我希望获得is_local2016年初所有ID为True 的列表,但2017年初为False.我开始按ID进行分组:

gp = df.groupby('id')
Run Code Online (Sandbox Code Playgroud)

然后我试过这只是为了过滤这些条件中的第二个(作为一种入门方式),但它返回所有组:

gp.apply(lambda x: ~x.is_local & (x.date > '2016-12-31'))
Run Code Online (Sandbox Code Playgroud)

如何以我需要的方式过滤?

piR*_*red 8

d1 = df.set_index(['id', 'date']).is_local.unstack()
d1.index[d1['2016-01-01'] & ~d1['2017-01-01']].tolist()

[123]
Run Code Online (Sandbox Code Playgroud)