如何使用Python将仅连续值保留在Pandas数据框中

yih*_*ren 9 python dataframe pandas

我有一个看起来像这样的数据框:

在此处输入图片说明

我只想保留每个组中的连续年份,如下图,其中删除了A组中的2005年和B组中的2009年和2011年。

在此处输入图片说明

我使用创建了一个年份差异列df['year_diff']=df.groupby(['group'])['Year'].diff(),然后仅保留年份差异等于1的行。

但是,此方法还将删除每个连续年份组中的第一行,因为第一行的年差为NAN。例如,将从组2000-2005中删除2000年。有什么办法可以避免这个问题?

piR*_*red 7

shift

像OP一样获取年度差异。然后检查是否等于1或先前的值是1

yd = df.Year.groupby(df.group).diff().eq(1)
df[yd | yd.shift(-1)]

   group  Year
0      A  2000
1      A  2001
2      A  2002
3      A  2003
5      A  2007
6      A  2008
7      A  2009
8      A  2010
9      A  2011
10     B  2005
11     B  2006
12     B  2007
15     B  2013
16     B  2014
17     B  2015
18     B  2016
19     B  2017
Run Code Online (Sandbox Code Playgroud)

设定

谢谢

a = [('A',x) for x in range(2000, 2012) if x not in [2004,2006]]
b = [('B',x) for x in range(2005, 2018) if x not in [2008,2010,2012]]
df = pd.DataFrame(a + b, columns=['group','Year'])
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

如果我理解正确,请使用diffcumsum创建其他组密钥,然后将groupby其与您的组列放在一起,并将其count等于1。

df[df.g.groupby([df.g,df.Year.diff().ne(1).cumsum()]).transform('count').ne(1)]

Out[317]:
    g  Year
0   A  2000
1   A  2001
2   A  2002
3   A  2003
5   A  2007
6   A  2008
7   A  2009
8   A  2010
9   A  2011
10  B  2005
11  B  2006
12  B  2007
15  B  2013
16  B  2014
17  B  2015
18  B  2016
19  B  2017
Run Code Online (Sandbox Code Playgroud)

数据

df=pd.DataFrame({'g':list('AAAAAAAAAABBBBBBBBBB',
                 'Year':[2000,2001,2002,2003,2005,2007,2008,2009,2010,2011,2005,2006,2007,2009,2011,2013,2014,2015,2016,2017])]})
Run Code Online (Sandbox Code Playgroud)