Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅选择序列分组方式_Python_Algorithm_Pandas_Dataframe - Fatal编程技术网

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