2020-01-02
2020-01-032020-01-022020-01-032020-01-022020-01-03
假设我们有一个Pandas DataFrame (df)作为:
您可以使用.groupby
+.filter
:
x = df.groupby("nickname").filter(lambda x: x["event"].eq(0).all())
print(x)
打印:
nickname event Date
2 B 0 2020-01-02
3 B 0 2020-01-03
您的代码很接近。而不是使用.max()
聚合和减少行数,您可以在'max'
上使用.transform()
使所有组值等于最大值(整个组为0或1)。
然后,像您所做的那样,检查这些值是否与0
相等,以获得布尔索引。
最后,在布尔索引上使用.loc
来定位全为零的组的行,如下所示:
df_out = df.loc[df.groupby('nickname')['event'].transform('max') == 0]
结果:
print(df_out)
nickname event Date
2 B 0 2020-01-02
3 B 0 2020-01-03