说我有这个数据帧,df。它的结构如下:
index date animal park_visits
0 Jan cat 1
1 Jan dog 2
2 Feb cat 1
3 Feb dog 1
4 Feb pig 4
5 March cat 3
6 March dog 2
7 March pig 3
8 April cat 2
如何创建一个新的数据框,以便在当前月份动物的月份访问量少于一个时,排除该行以及下个月的行?
例如,在索引0处,猫在1月只有一次公园访问,所以我会排除第0和第2条的条目。此外,由于猫在2月访问了公园一次,我也会排除当猫在3月访问公园3次时,在5号入口处。但是,由于猫在3月份三次参加了公园,我将把参赛作品列入4月份。
结果,我最终想要的结束样本数据框看起来像这样:
index date animal park_visits
0 Jan dog 2
1 Feb pig 4
2 March pig 3
3 April cat 2
如果没有循环,有没有办法有效地做到这一点?我最好的猜测是创建一个新的数据帧,其中park_visits = 1,然后尝试删除下一个实例,日期和动物是相同的。但是,我不确定如何仅删除下一个实例,而不是所有实例(因此我需要保留日期为4月的条目,动物为cat,park_visits为2)。任何帮助将不胜感激。
答案 0 :(得分:2)
我们希望识别本月和前一个月park_visits
大于一的行。我们使用shift来检查前一个月
f = lambda x: (lambda y: y & y.shift().fillna(True))(x > 1)
df[df.groupby('animal').park_visits.transform(f)]
date animal park_visits
index
1 Jan dog 2
4 Feb pig 4
7 March pig 3
8 April cat 2