我的数据集已根据下面的pandas数据框进行排序和过滤;
name id id2 year sales seq
a 00632 00 2006 200.00 0
a 00632 00 2007 380.00 1
a 00632 00 2010 73.00 2
a 00632 00 2011 147.00 3
a 00632 00 2012 80.00 4
b 00003 00 2009 153.00 0
b 00003 00 2010 390.00 1
b 00003 00 2011 730.00 2
b 00003 00 2012 312.00 3
b 00003 00 2013 179.00 4
我在制定如何隔离非连续年份时遇到了麻烦。我只返回一个数据集;
a 00632 00 2010 73.00 2
a 00632 00 2011 147.00 3
a 00632 00 2012 80.00 4
b 00003 00 2009 153.00 0
b 00003 00 2010 390.00 1
b 00003 00 2011 730.00 2
b 00003 00 2012 312.00 3
b 00003 00 2013 179.00 4
逻辑基本上是按名称删除记录,其中年份不如3年。
因此,对于以下记录将被删除,因为它们仅连续2年。
name id id2 year sales seq
a 00632 00 2006 200.00 0
a 00632 00 2007 380.00 1
我希望这是有道理的,因为我在试图找出这种逻辑的算法时遇到了麻烦。
答案 0 :(得分:1)
分两步进行。
我认为df
按'id','year'
排序。
首先,找到第+ + 2行所在的行,每行'id'
:
In [15]: firstyears=(df.groupby('id')['year'].shift(-2)-df['year'])==2
# [ False False True False False | True True True False False ]
使用逻辑或(|)运算符选择好行。 firstyears.shift(1)
将选择下一年,firstyears.shift(2)
下一个。
In [16]: df.loc[ firstyears | firstyears.shift(1) | firstyears.shift(2) ]
Out[16]:
name id id2 year sales seq
2 a 632 0 2010 73 2
3 a 632 0 2011 147 3
4 a 632 0 2012 80 4
5 b 3 0 2009 153 0
6 b 3 0 2010 390 1
7 b 3 0 2011 730 2
8 b 3 0 2012 312 3
9 b 3 0 2013 179 4