如何删除数据框(Python)中的当前和下一个实例?

时间:2017-08-03 05:47:14

标签: python pandas dataframe

说我有这个数据帧,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)。任何帮助将不胜感激。

1 个答案:

答案 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