Python 仅选择序列分组方式
我的数据集已根据以下数据框进行排序和筛选Python 仅选择序列分组方式,python,algorithm,pandas,dataframe,Python,Algorithm,Pandas,Dataframe,我的数据集已根据以下数据框进行排序和筛选 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
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
我在弄清楚如何区分非连续年份方面遇到了困难。I仅返回一个数据集作为
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
我希望这是有意义的,因为我在试图找出这种逻辑的算法时遇到了困难。一种分两步进行的方法
我假设df
是按'id'、'year'
排序的
首先,为每个'id'
查找第+2行中存在第+2年的行:
In [15]: firstyears=(df.groupby('id')['year'].shift(-2)-df['year'])==2
# [ False False True False False | True True True False False ]
并使用逻辑or(|)运算符选择好的行<代码>第一年。班次(1)将选择下一年,班次(2)将选择下一年
你好。看起来很有效。我无法理解以下代码:
df.loc[firstyears | 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